today is here

master
codeskyblue 8 years ago
parent 534f7d8f21
commit 42e45b24d7

@ -110,6 +110,22 @@ Only 4 states. [ref](http://supervisord.org/subprocess.html#process-states)
![states](docs/states.png)
## Notification (todo)
Configuration example
```yaml
notifications:
on:
fatal: true
pushover:
api_key: [token]
users:
- [user1]
- [user2]
```
### Pushover
<https://pushover.net/api>
# Plugin Design (todo)
Current plugins:

@ -40,7 +40,7 @@ fi
--channel="$CHANNEL" \
--version="$VERSION" \
--app="app_8Gji4eEAdDx" \
--platforms="darwin_amd64 linux_amd64" \
--platforms="darwin_amd64 linux_amd64 linux_386" \
--signing-key="equinox.key" \
--token="$EQUINOX_API_TOKEN" \
-- -tags bindata -ldflags "-X main.Version=$TRAVIS_COMMIT"

@ -81,9 +81,9 @@
<button class="btn btn-default btn-xs" v-on:click="cmdTail(p.program.name)">
<span class="glyphicon glyphicon-text-size"></span> Tail
</button>
<button class="btn btn-default btn-xs" disabled="true">
<a href="/settings/{{p.program.name}}" class="btn btn-default btn-xs">
<span class="glyphicon glyphicon-cog"></span> Setting
</button>
</a>
</td>
</tr>
<!-- <tr class="success">
@ -127,11 +127,11 @@
<div class="modal-body">
<div class="form-group">
<label>Name</label>
<input type="text" name="name" v-model="program.name" class="form-control" value="h" placeholder="name (must be unique)" required>
<input type="text" name="name" v-model="program.name" class="form-control" placeholder="name (must be unique)" required>
</div>
<div class="form-group">
<label>Command</label>
<input type="text" name="command" value="echo redis-server --port 7788" class="form-control" placeholder="shell command, ex: redis-server --port 6379">
<input type="text" name="command" class="form-control" placeholder="shell command, ex: redis-server --port 6379">
</div>
<div class="form-group">
<label>Directory</label>

@ -26,11 +26,6 @@
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-2">
<ul class="nav navbar-nav">
<li class="hidden-xs">
<a>
<span class="glyphicon glyphicon-qrcode"></span>
</a>
</li>
</ul>
<ul id="nav-right-bar" class="nav navbar-nav navbar-right">
</ul>
@ -40,6 +35,7 @@
</nav>
<div class="container">
<div class="col-md-12">
<h1>TODO</h1>
</div>
</div>
</body>

@ -96,31 +96,34 @@ func (s *Supervisor) stopAndWait(name string) error {
}
func (s *Supervisor) addOrUpdateProgram(pg Program) error {
defer s.broadcastEvent(pg.Name + " add or update")
// defer s.broadcastEvent(pg.Name + " add or update")
if err := pg.Check(); err != nil {
return err
}
origPg, ok := s.pgMap[pg.Name]
if ok {
if !reflect.DeepEqual(origPg, &pg) {
log.Println("Update:", pg.Name)
origProc := s.procMap[pg.Name]
isRunning := origProc.IsRunning()
go func() {
s.stopAndWait(origProc.Name)
newProc := s.newProcess(pg)
s.procMap[pg.Name] = newProc
*s.pgMap[pg.Name] = pg // update origin
if isRunning {
newProc.Operate(StartEvent)
}
}()
if reflect.DeepEqual(origPg, &pg) {
return nil
}
s.broadcastEvent(pg.Name + " update")
log.Println("Update:", pg.Name)
origProc := s.procMap[pg.Name]
isRunning := origProc.IsRunning()
go func() {
s.stopAndWait(origProc.Name)
newProc := s.newProcess(pg)
s.procMap[pg.Name] = newProc
*s.pgMap[pg.Name] = pg // update origin
if isRunning {
newProc.Operate(StartEvent)
}
}()
} else {
s.pgs = append(s.pgs, &pg)
s.pgMap[pg.Name] = &pg
s.procMap[pg.Name] = s.newProcess(pg)
s.broadcastEvent(pg.Name + " added")
}
return nil
}

Loading…
Cancel
Save