Merge pull request #124 from appleboy/pid

Support PID file
This commit is contained in:
Bo-Yi Wu 2016-08-20 21:32:21 +08:00 committed by GitHub
commit 4f7a2b29b9
5 changed files with 65 additions and 11 deletions

View File

@ -63,6 +63,10 @@ core:
cert_path: "cert.pem"
key_path: "key.pem"
http_proxy: "" # only working for GCM server
pid:
enabled: true
path: "gorush.pid"
override: true
api:
push_uri: "/api/push"
@ -119,13 +123,13 @@ $ go get -u github.com/appleboy/gorush
On linux
```
$ wget -qO- https://github.com/appleboy/gorush/releases/download/v1.6.0/gorush-v1.6.0-linux-amd64.tar.gz | tar xvz
$ wget -qO- https://github.com/appleboy/gorush/releases/download/v1.6.2/gorush-v1.6.2-linux-amd64.tar.gz | tar xvz
```
On OS X
```
$ wget -qO- https://github.com/appleboy/gorush/releases/download/v1.6.0/gorush-v1.6.0-darwin-amd64.tar.gz | tar xvz
$ wget -qO- https://github.com/appleboy/gorush/releases/download/v1.6.2/gorush-v1.6.2-darwin-amd64.tar.gz | tar xvz
```
### Command Usage

View File

@ -27,6 +27,7 @@ type SectionCore struct {
CertPath string `yaml:"cert_path"`
KeyPath string `yaml:"key_path"`
HTTPProxy string `yaml:"http_proxy"`
PID SectionPID `yaml:"pid"`
}
// SectionAPI is sub seciont of config.
@ -88,6 +89,13 @@ type SectionBuntDB struct {
Path string `yaml:"path"`
}
// SectionPID is sub seciont of config.
type SectionPID struct {
Enabled bool `yaml:"enabled"`
Path string `yaml:"path"`
Override bool `yaml:"override"`
}
// BuildDefaultPushConf is default config setting.
func BuildDefaultPushConf() ConfYaml {
var conf ConfYaml
@ -102,6 +110,9 @@ func BuildDefaultPushConf() ConfYaml {
conf.Core.KeyPath = "key.pem"
conf.Core.MaxNotification = 100
conf.Core.HTTPProxy = ""
conf.Core.PID.Enabled = false
conf.Core.PID.Path = "gorush.pid"
conf.Core.PID.Override = false
// Api
conf.API.PushURI = "/api/push"

View File

@ -8,6 +8,10 @@ core:
cert_path: "cert.pem"
key_path: "key.pem"
http_proxy: ""
pid:
enabled: false
path: "gorush.pid"
override: true
api:
push_uri: "/api/push"

View File

@ -63,6 +63,10 @@ func (suite *ConfigTestSuite) TestValidateConfDefault() {
assert.Equal(suite.T(), "key.pem", suite.ConfGorushDefault.Core.KeyPath)
assert.Equal(suite.T(), 100, suite.ConfGorushDefault.Core.MaxNotification)
assert.Equal(suite.T(), "", suite.ConfGorushDefault.Core.HTTPProxy)
// Pid
assert.Equal(suite.T(), false, suite.ConfGorushDefault.Core.PID.Enabled)
assert.Equal(suite.T(), "gorush.pid", suite.ConfGorushDefault.Core.PID.Path)
assert.Equal(suite.T(), false, suite.ConfGorushDefault.Core.PID.Override)
// Api
assert.Equal(suite.T(), "/api/push", suite.ConfGorushDefault.API.PushURI)
@ -111,6 +115,10 @@ func (suite *ConfigTestSuite) TestValidateConf() {
assert.Equal(suite.T(), "key.pem", suite.ConfGorush.Core.KeyPath)
assert.Equal(suite.T(), 100, suite.ConfGorush.Core.MaxNotification)
assert.Equal(suite.T(), "", suite.ConfGorush.Core.HTTPProxy)
// Pid
assert.Equal(suite.T(), false, suite.ConfGorush.Core.PID.Enabled)
assert.Equal(suite.T(), "gorush.pid", suite.ConfGorush.Core.PID.Path)
assert.Equal(suite.T(), true, suite.ConfGorush.Core.PID.Override)
// Api
assert.Equal(suite.T(), "/api/push", suite.ConfGorush.API.PushURI)

View File

@ -7,6 +7,7 @@ import (
"github.com/appleboy/gorush/gorush"
"log"
"os"
"strconv"
)
func checkInput(token, message string) {
@ -51,6 +52,28 @@ func usage() {
os.Exit(0)
}
func createPIDFile() error {
if !gorush.PushConf.Core.PID.Enabled {
return nil
}
_, err := os.Stat(gorush.PushConf.Core.PID.Path)
if os.IsNotExist(err) || gorush.PushConf.Core.PID.Override {
currentPid := os.Getpid()
file, err := os.Create(gorush.PushConf.Core.PID.Path)
if err != nil {
return fmt.Errorf("Can't create PID file: %v", err)
}
defer file.Close()
_, err = file.WriteString(strconv.FormatInt(int64(currentPid), 10))
if err != nil {
return fmt.Errorf("Can'write PID information on %s: %v", gorush.PushConf.Core.PID.Path, err)
}
} else {
return fmt.Errorf("%s already exists", gorush.PushConf.Core.PID.Path)
}
return nil
}
func main() {
opts := config.ConfYaml{}
@ -207,6 +230,10 @@ func main() {
gorush.LogError.Fatal(err)
}
if err = createPIDFile(); err != nil {
gorush.LogError.Fatal(err)
}
gorush.InitAppStatus()
gorush.InitAPNSClient()
gorush.InitWorkers(gorush.PushConf.Core.WorkerNum, gorush.PushConf.Core.QueueNum)