update docs, update silly bootstrap program

master
Jaime Pillora 2017-08-24 20:36:05 +10:00
parent 2e4decb22e
commit 7516f44481
3 changed files with 72 additions and 72 deletions

View File

@ -1,6 +1,6 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2016 Jaime Pillora Copyright (c) 2017 Jaime Pillora
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

129
README.md
View File

@ -11,7 +11,7 @@ Commonly, graceful restarts are performed by the active process (*dark blue*) cl
### Features ### Features
* Simple * Simple
* Works with process managers * Works with process managers (systemd, upstart, supervisor, etc)
* Graceful, zero-down time restarts * Graceful, zero-down time restarts
* Easy self-upgrading binaries * Easy self-upgrading binaries
@ -77,77 +77,76 @@ See [Config](https://godoc.org/github.com/jpillora/overseer#Config)uration optio
### More examples ### More examples
* See the [example/](example/) directory and run `example.sh`, you should see the following output: See the [example/](example/) directory and run `example.sh`, you should see the following output:
```sh ```sh
$ cd example/ $ cd example/
$ sh example.sh $ sh example.sh
serving . on port 5002 BUILT APP (1)
BUILT APP (1) RUNNING APP
RUNNING APP app#1 (031c802ee74f00b2a5c52f2fe647523973c09441) listening...
app#1 (1cd8b9928d44b0a6e89df40574b8b6d20a417679) listening... app#1 (031c802ee74f00b2a5c52f2fe647523973c09441) says hello
app#1 (1cd8b9928d44b0a6e89df40574b8b6d20a417679) says hello app#1 (031c802ee74f00b2a5c52f2fe647523973c09441) says hello
app#1 (1cd8b9928d44b0a6e89df40574b8b6d20a417679) says hello BUILT APP (2)
BUILT APP (2) app#2 (25d19f139f50f39fadbd066b438ebdc28d818eb1) listening...
app#2 (b9b251f1be6d0cc423ef921f107cb4fc52f760b3) listening... app#2 (25d19f139f50f39fadbd066b438ebdc28d818eb1) says hello
app#2 (b9b251f1be6d0cc423ef921f107cb4fc52f760b3) says hello app#2 (25d19f139f50f39fadbd066b438ebdc28d818eb1) says hello
app#2 (b9b251f1be6d0cc423ef921f107cb4fc52f760b3) says hello app#1 (031c802ee74f00b2a5c52f2fe647523973c09441) says hello
app#1 (1cd8b9928d44b0a6e89df40574b8b6d20a417679) says hello app#1 (031c802ee74f00b2a5c52f2fe647523973c09441) exiting...
app#1 (1cd8b9928d44b0a6e89df40574b8b6d20a417679) exiting... BUILT APP (3)
BUILT APP (3) app#3 (5ed8170e5bbd6947cc514c87ac29e7acfba5cffc) listening...
app#3 (248f80ea049c835e7e3714b7169c539d3a4d6131) listening... app#3 (5ed8170e5bbd6947cc514c87ac29e7acfba5cffc) says hello
app#3 (248f80ea049c835e7e3714b7169c539d3a4d6131) says hello app#3 (5ed8170e5bbd6947cc514c87ac29e7acfba5cffc) says hello
app#3 (248f80ea049c835e7e3714b7169c539d3a4d6131) says hello app#2 (25d19f139f50f39fadbd066b438ebdc28d818eb1) says hello
app#2 (b9b251f1be6d0cc423ef921f107cb4fc52f760b3) says hello app#2 (25d19f139f50f39fadbd066b438ebdc28d818eb1) exiting...
app#2 (b9b251f1be6d0cc423ef921f107cb4fc52f760b3) exiting... app#3 (5ed8170e5bbd6947cc514c87ac29e7acfba5cffc) says hello
app#3 (248f80ea049c835e7e3714b7169c539d3a4d6131) says hello ```
```
**Note:** `app#1` stays running until the last request is closed. **Note:** `app#1` stays running until the last request is closed.
* Only use graceful restarts: #### Only use graceful restarts
```go ```go
func main() { func main() {
overseer.Run(overseer.Config{ overseer.Run(overseer.Config{
Program: prog, Program: prog,
Address: ":3000", Address: ":3000",
}) })
} }
``` ```
Send `main` a `SIGUSR2` (`Config.RestartSignal`) to manually trigger a restart Send `main` a `SIGUSR2` (`Config.RestartSignal`) to manually trigger a restart
* Only use auto-upgrades, no restarts #### Only use auto-upgrades, no restarts
```go ```go
func main() { func main() {
overseer.Run(overseer.Config{ overseer.Run(overseer.Config{
Program: prog, Program: prog,
NoRestart: true, NoRestart: true,
Fetcher: &fetcher.HTTP{ Fetcher: &fetcher.HTTP{
URL: "http://localhost:4000/binaries/myapp", URL: "http://localhost:4000/binaries/myapp",
Interval: 1 * time.Second, Interval: 1 * time.Second,
}, },
}) })
} }
``` ```
Your binary will be upgraded though it will require manual restart from the user, suitable for creating self-upgrading command-line applications. Your binary will be upgraded though it will require manual restart from the user, suitable for creating self-upgrading command-line applications.
* Multi-platform binaries using a dynamic fetch `URL` #### Multi-platform binaries using a dynamic fetch `URL`
```go ```go
func main() { func main() {
overseer.Run(overseer.Config{ overseer.Run(overseer.Config{
Program: prog, Program: prog,
Fetcher: &fetcher.HTTP{ Fetcher: &fetcher.HTTP{
URL: "http://localhost:4000/binaries/app-"+runtime.GOOS+"-"+runtime.GOARCH, URL: "http://localhost:4000/binaries/app-"+runtime.GOOS+"-"+runtime.GOARCH,
//e.g.http://localhost:4000/binaries/app-linux-amd64 //e.g.http://localhost:4000/binaries/app-linux-amd64
}, },
}) })
} }
``` ```
### Known issues ### Known issues
@ -161,8 +160,10 @@ See [Config](https://godoc.org/github.com/jpillora/overseer#Config)uration optio
* [Core `overseer` package](https://godoc.org/github.com/jpillora/overseer) * [Core `overseer` package](https://godoc.org/github.com/jpillora/overseer)
* [Common `fetcher.Interface`](https://godoc.org/github.com/jpillora/overseer/fetcher#Interface) * [Common `fetcher.Interface`](https://godoc.org/github.com/jpillora/overseer/fetcher#Interface)
* [HTTP fetcher type](https://godoc.org/github.com/jpillora/overseer/fetcher#HTTP) * [File fetcher](https://godoc.org/github.com/jpillora/overseer/fetcher#File)
* [S3 fetcher type](https://godoc.org/github.com/jpillora/overseer/fetcher#S3) * [HTTP fetcher](https://godoc.org/github.com/jpillora/overseer/fetcher#HTTP)
* [S3 fetcher](https://godoc.org/github.com/jpillora/overseer/fetcher#S3)
* [Github fetcher](https://godoc.org/github.com/jpillora/overseer/fetcher#Github)
### Third-party Fetchers ### Third-party Fetchers

View File

@ -4,25 +4,23 @@ import (
"strconv" "strconv"
"time" "time"
"github.com/jpillora/opts"
"github.com/jpillora/overseer" "github.com/jpillora/overseer"
"github.com/jpillora/overseer/fetcher" "github.com/jpillora/overseer/fetcher"
"github.com/jpillora/opts"
) )
func main() { func main() {
c := struct { c := struct {
URL string `type:"arg" help:"<url> of where to GET the binary"` URL string `type:"arg" help:"<url> of where to GET the binary"`
Port int `help:"listening port"` Port int `help:"listening port"`
Log bool `help:"enable logging"` NoDebug bool `help:"disable debug mode"`
}{ }{
Port: 3000, Port: 3000,
Log: true,
} }
opts.Parse(&c) opts.Parse(&c)
overseer.Run(overseer.Config{ overseer.Run(overseer.Config{
Log: c.Log,
Program: func(state overseer.State) { Program: func(state overseer.State) {
//noop //block forever
select {} select {}
}, },
Address: ":" + strconv.Itoa(c.Port), Address: ":" + strconv.Itoa(c.Port),
@ -30,5 +28,6 @@ func main() {
URL: c.URL, URL: c.URL,
Interval: 1 * time.Second, Interval: 1 * time.Second,
}, },
Debug: !c.NoDebug,
}) })
} }