From 5bea74c2ed2cfd2d97184849b5be4a082444677a Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Wed, 20 Apr 2016 14:42:42 -0700 Subject: [PATCH] Rename and move some things around --- README.md | 3 +-- docker/Dockerfile | 8 -------- docker/Dockerfile.final | 10 ---------- docker/README.md | 8 -------- docker/build.sh | 5 ----- docker/linux_dev/Dockerfile | 11 ----------- docker/linux_dev/build.sh | 3 --- logos/nats-server.jpg | Bin 0 -> 19911 bytes logos/nats-server.png | Bin 0 -> 47637 bytes gnatsd.go => main.go | 0 server/monitor.go | 4 +++- server/{ => pse}/pse_darwin.go | 4 ++-- server/{ => pse}/pse_freebsd.go | 6 +++--- server/{ => pse}/pse_linux.go | 25 +++++++++++++++++++++++-- server/pse/pse_solaris.go | 12 ++++++++++++ server/{ => pse}/pse_test.go | 6 +++--- server/{ => pse}/pse_windows.go | 6 +++--- server/{ => pse}/pse_windows_test.go | 3 ++- server/pse_solaris.go | 12 ------------ server/server.go | 8 ++++---- 20 files changed, 56 insertions(+), 78 deletions(-) delete mode 100644 docker/Dockerfile delete mode 100644 docker/Dockerfile.final delete mode 100644 docker/README.md delete mode 100755 docker/build.sh delete mode 100644 docker/linux_dev/Dockerfile delete mode 100755 docker/linux_dev/build.sh create mode 100644 logos/nats-server.jpg create mode 100644 logos/nats-server.png rename gnatsd.go => main.go (100%) rename server/{ => pse}/pse_darwin.go (87%) rename server/{ => pse}/pse_freebsd.go (89%) rename server/{ => pse}/pse_linux.go (70%) create mode 100644 server/pse/pse_solaris.go rename server/{ => pse}/pse_test.go (91%) rename server/{ => pse}/pse_windows.go (98%) rename server/{ => pse}/pse_windows_test.go (99%) delete mode 100644 server/pse_solaris.go diff --git a/README.md b/README.md index 26fef510..e636e5b4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -# NATS server - +## [![License][License-Image]][License-Url] [![ReportCard][ReportCard-Image]][ReportCard-Url] [![Build][Build-Status-Image]][Build-Status-Url] [![Release][Release-Image]][Release-Url] [![Coverage][Coverage-Image]][Coverage-Url] A High Performance [NATS](https://nats.io) Server written in [Go.](http://golang.org) diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index 527d6723..00000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM google/golang:1.4 - -MAINTAINER Derek Collison - -RUN CGO_ENABLED=0 go get -a -ldflags '-s' --installsuffix cgo github.com/apcera/gnatsd -COPY Dockerfile.final /gopath/bin/Dockerfile - -CMD docker build -t apcera/gnatsd /gopath/bin diff --git a/docker/Dockerfile.final b/docker/Dockerfile.final deleted file mode 100644 index 7a1c851c..00000000 --- a/docker/Dockerfile.final +++ /dev/null @@ -1,10 +0,0 @@ -FROM scratch - -MAINTAINER Derek Collison - -ADD gnatsd /gnatsd - -CMD [] -ENTRYPOINT ["/gnatsd", "-p", "4222", "-m", "8333"] - -EXPOSE 4222 8333 diff --git a/docker/README.md b/docker/README.md deleted file mode 100644 index 8b47342d..00000000 --- a/docker/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# [Dockerized] (http://www.docker.com) [nats](https://registry.hub.docker.com/_/nats/) - -This is deprecated, please use [nats-docker](https://github.com/nats-io/nats-docker) - -A docker image for gnatsd. This is created as a single static executable, so there are multiple passes through Docker to first build the static executable and then to package it under an empty (scratch) base image. - - - diff --git a/docker/build.sh b/docker/build.sh deleted file mode 100755 index 02b943c9..00000000 --- a/docker/build.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -docker build -t apcera/gnatsd_build . -docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):$(which docker) -ti --name gnatsd_build apcera/gnatsd_build -docker rm gnatsd_build -docker rmi apcera/gnatsd_build \ No newline at end of file diff --git a/docker/linux_dev/Dockerfile b/docker/linux_dev/Dockerfile deleted file mode 100644 index 9609cdf9..00000000 --- a/docker/linux_dev/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM ubuntu:14.04 - -MAINTAINER Derek Collison - -RUN apt-get update -y && apt-get install --no-install-recommends -y -q curl build-essential ca-certificates git mercurial bzr -RUN mkdir /goroot && curl https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz | tar xvzf - -C /goroot --strip-components=1 -RUN mkdir /gopath - -ENV GOROOT /goroot -ENV GOPATH /gopath -ENV PATH $PATH:$GOROOT/bin:$GOPATH/bin diff --git a/docker/linux_dev/build.sh b/docker/linux_dev/build.sh deleted file mode 100755 index d469044c..00000000 --- a/docker/linux_dev/build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -docker build -t nats_dev . - diff --git a/logos/nats-server.jpg b/logos/nats-server.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1774137b1412477a43ba2d07c5c55a2a7c26075b GIT binary patch literal 19911 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 @@ -56,7 +56,7 @@ import ( ) // This is a placeholder for now. -func procUsage(pcpu *float64, rss, vss *int64) error { +func ProcUsage(pcpu *float64, rss, vss *int64) error { var r, v C.uint var c C.double diff --git a/server/pse_linux.go b/server/pse/pse_linux.go similarity index 70% rename from server/pse_linux.go rename to server/pse/pse_linux.go index e4434d05..e732d087 100644 --- a/server/pse_linux.go +++ b/server/pse/pse_linux.go @@ -1,6 +1,6 @@ // Copyright 2015 Apcera Inc. All rights reserved. -package server +package pse import ( "bytes" @@ -27,7 +27,7 @@ func init() { procStatFile = fmt.Sprintf("/proc/%d/stat", os.Getpid()) } -func procUsage(pcpu *float64, rss, vss *int64) error { +func ProcUsage(pcpu *float64, rss, vss *int64) error { contents, err := ioutil.ReadFile(procStatFile) if err != nil { return err @@ -56,3 +56,24 @@ func procUsage(pcpu *float64, rss, vss *int64) error { return nil } + +// Ascii numbers 0-9 +const ( + asciiZero = 48 + asciiNine = 57 +) + +// parseInt64 expects decimal positive numbers. We +// return -1 to signal error +func parseInt64(d []byte) (n int64) { + if len(d) == 0 { + return -1 + } + for _, dec := range d { + if dec < asciiZero || dec > asciiNine { + return -1 + } + n = n*10 + (int64(dec) - asciiZero) + } + return n +} diff --git a/server/pse/pse_solaris.go b/server/pse/pse_solaris.go new file mode 100644 index 00000000..596643c9 --- /dev/null +++ b/server/pse/pse_solaris.go @@ -0,0 +1,12 @@ +// Copyright 2015-2016 Apcera Inc. All rights reserved. + +package pse + +// This is a placeholder for now. +func ProcUsage(pcpu *float64, rss, vss *int64) error { + *pcpu = 0.0 + *rss = 0 + *vss = 0 + + return nil +} diff --git a/server/pse_test.go b/server/pse/pse_test.go similarity index 91% rename from server/pse_test.go rename to server/pse/pse_test.go index d9af43c0..7a03c671 100644 --- a/server/pse_test.go +++ b/server/pse/pse_test.go @@ -1,6 +1,6 @@ -// Copyright 2015 Apcera Inc. All rights reserved. +// Copyright 2015-2016 Apcera Inc. All rights reserved. -package server +package pse import ( "fmt" @@ -29,7 +29,7 @@ func TestPSEmulation(t *testing.T) { psVss *= 1024 // 1k blocks, want bytes. // Our internal version - procUsage(&pcpu, &rss, &vss) + ProcUsage(&pcpu, &rss, &vss) if pcpu != psPcpu { delta := int64(pcpu - psPcpu) diff --git a/server/pse_windows.go b/server/pse/pse_windows.go similarity index 98% rename from server/pse_windows.go rename to server/pse/pse_windows.go index ad800d74..8d76bd8c 100644 --- a/server/pse_windows.go +++ b/server/pse/pse_windows.go @@ -1,16 +1,16 @@ // Copyright 2015-2016 Apcera Inc. All rights reserved. -package server +package pse import ( "errors" "fmt" "os" "os/exec" + "path/filepath" "strconv" "strings" "sync" - "path/filepath" ) // cache the image name to optimize repeated calls @@ -112,7 +112,7 @@ func getProcessImageName() (name string) { // If there is more than one instance, "#" is appended to // the image name. Wildcard filters are supported, but result in a very // complex data set to parse. -func procUsage(pcpu *float64, rss, vss *int64) error { +func ProcUsage(pcpu *float64, rss, vss *int64) error { var ppid int = -1 imageLock.Lock() diff --git a/server/pse_windows_test.go b/server/pse/pse_windows_test.go similarity index 99% rename from server/pse_windows_test.go rename to server/pse/pse_windows_test.go index 87ec0fb9..408f061a 100644 --- a/server/pse_windows_test.go +++ b/server/pse/pse_windows_test.go @@ -1,6 +1,7 @@ // Copyright 2016 Apcera Inc. All rights reserved. // +build win -package server + +package pse import ( "fmt" diff --git a/server/pse_solaris.go b/server/pse_solaris.go deleted file mode 100644 index 80f12a38..00000000 --- a/server/pse_solaris.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2015 Apcera Inc. All rights reserved. - -package server - -// This is a placeholder for now. -func procUsage(pcpu *float64, rss, vss *int64) error { - *pcpu = 0.0 - *rss = 0 - *vss = 0 - - return nil -} diff --git a/server/server.go b/server/server.go index b37e7d00..767a77eb 100644 --- a/server/server.go +++ b/server/server.go @@ -162,7 +162,7 @@ func PrintAndDie(msg string) { // PrintServerAndExit will print our version and exit. func PrintServerAndExit() { - fmt.Printf("gnatsd version %s\n", VERSION) + fmt.Printf("nats-server version %s\n", VERSION) os.Exit(0) } @@ -201,7 +201,7 @@ func (s *Server) logPid() { // Start up the server, this will block. // Start via a Go routine if needed. func (s *Server) Start() { - Noticef("Starting gnatsd version %s", VERSION) + Noticef("Starting nats-server version %s", VERSION) Debugf("Go build version %s", s.info.GoVersion) s.running = true @@ -319,8 +319,8 @@ func (s *Server) AcceptLoop() { Noticef("TLS required for client connections") } - Debugf("server id is %s", s.info.ID) - Noticef("server is ready") + Debugf("Server id is %s", s.info.ID) + Noticef("Server is ready") // Setup state that can enable shutdown s.mu.Lock()