Skip to content

Commit

Permalink
0x820393
Browse files Browse the repository at this point in the history
  • Loading branch information
DiniFarb committed Jun 15, 2023
1 parent cb86dad commit d4c0a6c
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 13 deletions.
90 changes: 90 additions & 0 deletions cmd/manager.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package main

import (
"encoding/json"
"fmt"
"net/http"

"github.com/dinifarb/mlog"
"github.com/dinifarb/queuic/pkg/proto"
)

type Manager struct {
http.ServeMux
}

func NewManager() *Manager {
return &Manager{}
}

func (m *Manager) Start() error {
m.HandleFunc("/stats", m.statsHandler)
m.HandleFunc("/createQueue", m.createQueueHandler)
//m.HandleFunc("/deleteQueue", m.deleteQueueHandler)
m.HandleFunc("/enqueue", m.enqueueHandler)
mlog.Info("starting http interface on port 8080")
return http.ListenAndServe(":8080", m)
}

func (m *Manager) statsHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(srv.GetStats())
}

type CreateQueueRequest struct {
QueueName string `json:"queueName"`
}

func (m *Manager) createQueueHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
if r.Method != http.MethodPost {
w.WriteHeader(http.StatusMethodNotAllowed)
json.NewEncoder(w).Encode("method not allowed")
return
}
var body CreateQueueRequest
if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
w.WriteHeader(http.StatusBadRequest)
json.NewEncoder(w).Encode("bad request")
return
}
name := proto.QueueName{}
name.ParseFromString(body.QueueName)
if err := srv.CreateQueue(name); err != nil {
w.WriteHeader(http.StatusInternalServerError)
json.NewEncoder(w).Encode("internal server error")
return
}
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode("queue created")
}

type EnqueueRequest struct {
QueueName string `json:"queueName"`
Message string `json:"message"`
}

func (m *Manager) enqueueHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
if r.Method != http.MethodPost {
w.WriteHeader(http.StatusMethodNotAllowed)
json.NewEncoder(w).Encode("method not allowed")
return
}
var body EnqueueRequest
if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
w.WriteHeader(http.StatusBadRequest)
json.NewEncoder(w).Encode("bad request")
return
}
name := proto.QueueName{}
name.ParseFromString(body.QueueName)
if err := srv.Enqueue(name, []byte(body.Message)); err != nil {
w.WriteHeader(http.StatusInternalServerError)
json.NewEncoder(w).Encode(fmt.Sprintf(`{"error": "internal server error: %s"}`, err.Error()))
return
}
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode("message enqueued")
}
29 changes: 16 additions & 13 deletions cmd/queueic.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import (
"github.com/dinifarb/queuic/pkg/server"
)

var srv *server.QueuicServer

func main() {
fmt.Println(`
___ _
Expand All @@ -19,26 +21,27 @@ func main() {
`)
mlog.SetAppName("QUEUEIC")
logLevel := os.Getenv("LOG_LEVEL")
switch strings.ToLower(logLevel) {
case "debug":
if strings.ToLower(logLevel) == "debug" {
mlog.SetLevel(mlog.Ldebug)
case "info":
mlog.SetLevel(mlog.Linfo)
case "warn":
mlog.SetLevel(mlog.Lwarn)
case "error":
mlog.SetLevel(mlog.Lerror)
default:
mlog.Warn("LOG_LEVEL env variable is not set use default level")
mlog.SetLevel(mlog.Linfo)
}
keyString := os.Getenv("QUEUEIC_KEY_STRING")
if keyString == "" {
mlog.Warn("QUEUEIC_KEY_STRING env variable is not set use default key")
keyString = "QUEUEIC"
}
svr := server.NewQueuicServer(keyString)
if err := svr.Serve(); err != nil {
srv = server.NewQueuicServer(keyString)
if err := srv.LoadQueuesFromDisk(); err != nil {
mlog.Error("failed to load queues from disk: %v", err)
os.Exit(1)
}
manager := NewManager()
go func() {
if err := manager.Start(); err != nil {
mlog.Error("failed to start manager: %v", err)
os.Exit(1)
}
}()
if err := srv.Serve(); err != nil {
mlog.Error("server error: %v", err)
os.Exit(1)
}
Expand Down

0 comments on commit d4c0a6c

Please sign in to comment.