|
|
|
@ -25,14 +25,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
|
|
package test |
|
|
|
|
|
|
|
import ( |
|
|
|
"context" |
|
|
|
"encoding/json" |
|
|
|
"io" |
|
|
|
"net/http" |
|
|
|
"os" |
|
|
|
"os/signal" |
|
|
|
"strings" |
|
|
|
//"os"
|
|
|
|
"io" |
|
|
|
"syscall" |
|
|
|
|
|
|
|
"gitlab.weird-web-workers.org/golang/logger" |
|
|
|
) |
|
|
|
|
|
|
|
type ApiHandler struct {} |
|
|
|
type ApiHandler struct { |
|
|
|
log *logger.Logger |
|
|
|
} |
|
|
|
|
|
|
|
type version struct { |
|
|
|
Version string `json:"Version"` |
|
|
|
@ -40,6 +47,12 @@ type version struct { |
|
|
|
BuildTime string `json:"BuildTimestamp"` |
|
|
|
} |
|
|
|
|
|
|
|
type Server struct { |
|
|
|
server *http.Server |
|
|
|
log *logger.Logger |
|
|
|
Stop chan bool |
|
|
|
} |
|
|
|
|
|
|
|
func (handler *ApiHandler) ServeHTTP( |
|
|
|
response http.ResponseWriter, |
|
|
|
request *http.Request, |
|
|
|
@ -65,10 +78,47 @@ func (handler *ApiHandler) ServeHTTP( |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func router() { |
|
|
|
handler := ApiHandler{} |
|
|
|
func NewServer(addr string, log *logger.Logger) (server *Server) { |
|
|
|
handler := ApiHandler{log: log} |
|
|
|
|
|
|
|
http.Handle("/api/0.0.1/", http.StripPrefix("/api/0.0.1/", &handler)) |
|
|
|
|
|
|
|
server = &Server{ |
|
|
|
server: &http.Server{Addr: addr}, |
|
|
|
log: log, |
|
|
|
Stop: make(chan bool), |
|
|
|
} |
|
|
|
go func() { |
|
|
|
server.log.Info("Listening on %s", addr) |
|
|
|
if err := server.server.ListenAndServe(); |
|
|
|
err != http.ErrServerClosed { |
|
|
|
logger.Default.LogError(err, "Stop listening") |
|
|
|
} |
|
|
|
}() |
|
|
|
|
|
|
|
interrupt := make(chan os.Signal, 1) |
|
|
|
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM, syscall.SIGINT) |
|
|
|
go func() { |
|
|
|
for run, ok := true, true; run && ok; { |
|
|
|
select { |
|
|
|
case <-interrupt: |
|
|
|
server.log.Info("API service Interrupted by signal") |
|
|
|
run = false |
|
|
|
case run, ok = <-server.Stop: |
|
|
|
server.log.Info("API service stopped") |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
ctx := context.Background() |
|
|
|
if err := server.server.Shutdown(ctx); err != nil { |
|
|
|
server.log.LogError(err, "Unclean server shutdown") |
|
|
|
} else { |
|
|
|
server.log.Info("Server stopped") |
|
|
|
} |
|
|
|
server.Stop <- true |
|
|
|
}() |
|
|
|
|
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
// vim: ts=4 sts=4 sw=4 noet tw=72:
|