summaryrefslogtreecommitdiff
path: root/runtime/state.go
diff options
context:
space:
mode:
authorunclejack <unclejack@users.noreply.github.com>2014-04-09 01:56:01 +0300
committerunclejack <unclejack@users.noreply.github.com>2014-04-09 01:56:01 +0300
commite128a606e39fa63c6b4fd6e53a1d88cf00aad868 (patch)
tree199ee7eb6678ffecd2ddad95fce794c795ad5183 /runtime/state.go
parent143c9707a9fafc39e1d9747f528db97b2564f01e (diff)
parentdc9c28f51d669d6b09e81c2381f800f1a33bb659 (diff)
downloaddocker-release-0.10.tar.gz
Merge pull request #5079 from unclejack/bump_v0.10.0release-0.100.10.1-hotfixes
Bump version to v0.10.0
Diffstat (limited to 'runtime/state.go')
-rw-r--r--runtime/state.go84
1 files changed, 84 insertions, 0 deletions
diff --git a/runtime/state.go b/runtime/state.go
new file mode 100644
index 0000000000..316b8a40f1
--- /dev/null
+++ b/runtime/state.go
@@ -0,0 +1,84 @@
+package runtime
+
+import (
+ "fmt"
+ "github.com/dotcloud/docker/utils"
+ "sync"
+ "time"
+)
+
+type State struct {
+ sync.RWMutex
+ Running bool
+ Pid int
+ ExitCode int
+ StartedAt time.Time
+ FinishedAt time.Time
+ Ghost bool
+}
+
+// String returns a human-readable description of the state
+func (s *State) String() string {
+ s.RLock()
+ defer s.RUnlock()
+
+ if s.Running {
+ if s.Ghost {
+ return fmt.Sprintf("Ghost")
+ }
+ return fmt.Sprintf("Up %s", utils.HumanDuration(time.Now().UTC().Sub(s.StartedAt)))
+ }
+ if s.FinishedAt.IsZero() {
+ return ""
+ }
+ return fmt.Sprintf("Exited (%d) %s ago", s.ExitCode, utils.HumanDuration(time.Now().UTC().Sub(s.FinishedAt)))
+}
+
+func (s *State) IsRunning() bool {
+ s.RLock()
+ defer s.RUnlock()
+
+ return s.Running
+}
+
+func (s *State) IsGhost() bool {
+ s.RLock()
+ defer s.RUnlock()
+
+ return s.Ghost
+}
+
+func (s *State) GetExitCode() int {
+ s.RLock()
+ defer s.RUnlock()
+
+ return s.ExitCode
+}
+
+func (s *State) SetGhost(val bool) {
+ s.Lock()
+ defer s.Unlock()
+
+ s.Ghost = val
+}
+
+func (s *State) SetRunning(pid int) {
+ s.Lock()
+ defer s.Unlock()
+
+ s.Running = true
+ s.Ghost = false
+ s.ExitCode = 0
+ s.Pid = pid
+ s.StartedAt = time.Now().UTC()
+}
+
+func (s *State) SetStopped(exitCode int) {
+ s.Lock()
+ defer s.Unlock()
+
+ s.Running = false
+ s.Pid = 0
+ s.FinishedAt = time.Now().UTC()
+ s.ExitCode = exitCode
+}