Skip to content

Commit

Permalink
chore: refactor code for implement prometheus
Browse files Browse the repository at this point in the history
  • Loading branch information
rulanugrh committed Mar 19, 2024
1 parent 47a2941 commit 91b0fd1
Show file tree
Hide file tree
Showing 11 changed files with 139 additions and 90 deletions.
20 changes: 10 additions & 10 deletions api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,18 +85,18 @@ func main() {
penyakitRepository := repository.NewPenyakit(postgres)
reportedRepository := repository.NewReported(mongo.Conn, conf)

userService := service.NewUser(userRepository, *gauge)
obatService := service.NewObat(obatRepository, *gauge)
kunjunganServices := service.NewKunjungan(kunjunganRepository, reportedRepository, *gauge)
penyakitService := service.NewPenyakit(penyakitRepository, *gauge)
adminService := service.NewAdmin(obatRepository, penyakitRepository, reportedRepository, userRepository, gauge)
userService := service.NewUser(userRepository)
obatService := service.NewObat(obatRepository)
kunjunganServices := service.NewKunjungan(kunjunganRepository, reportedRepository)
penyakitService := service.NewPenyakit(penyakitRepository)
adminService := service.NewAdmin(obatRepository, penyakitRepository, reportedRepository, userRepository)

api := API{
obat: handler.NewObat(obatService),
user: handler.NewUser(userService),
kunjungan: handler.NewKunjungan(kunjunganServices),
penyakit: handler.NewPenyakit(penyakitService),
admin: handler.NewAdmin(adminService),
obat: handler.NewObat(obatService, gauge),
user: handler.NewUser(userService, gauge),
kunjungan: handler.NewKunjungan(kunjunganServices, gauge),
penyakit: handler.NewPenyakit(penyakitService, gauge),
admin: handler.NewAdmin(adminService, gauge),
}

routes := mux.NewRouter()
Expand Down
43 changes: 40 additions & 3 deletions api/http/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@ import (
"net/http"
"strconv"
"strings"
"time"

"github.com/prometheus/client_golang/prometheus"
"github.com/rulanugrh/larissa/internal/entity/domain"
"github.com/rulanugrh/larissa/internal/service"
"github.com/rulanugrh/larissa/internal/util"
"github.com/rulanugrh/larissa/pkg"
)

type AdminInterface interface {
Expand All @@ -23,18 +26,21 @@ type AdminInterface interface {

type admin struct {
service service.AdminInterface
gauge *pkg.Data
}

func NewAdmin(service service.AdminInterface) AdminInterface {
func NewAdmin(service service.AdminInterface, gauge *pkg.Data) AdminInterface {
return &admin{
service: service,
gauge: gauge,
}
}

func(a *admin) Penyakit(w http.ResponseWriter, r *http.Request) {
var req domain.Penyakit
err := json.NewDecoder(r.Body).Decode(&req)
if err != nil {
a.gauge.PenyakitHistory.With(prometheus.Labels{"code": "500", "method": "POST", "type": "create"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.InternalServerError("cannot read request body"))
w.WriteHeader(500)
w.Write(response)
Expand All @@ -43,12 +49,17 @@ func(a *admin) Penyakit(w http.ResponseWriter, r *http.Request) {

data, err := a.service.CreatePenyakit(req)
if err != nil {
a.gauge.PenyakitHistory.With(prometheus.Labels{"code": "400", "method": "POST", "type": "create"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.BadRequest(err.Error()))
w.WriteHeader(400)
w.Write(response)
return
}

a.gauge.Penyakit.Inc()
a.gauge.PenyakitHistory.With(prometheus.Labels{"code": "200", "method": "POST", "type": "create"}).Observe(time.Since(time.Now()).Seconds())
a.gauge.PenyakitUpgrade.With(prometheus.Labels{"type": "create"}).Inc()

response := util.WriteJSON(util.Success("success add to database", data))
w.WriteHeader(200)
w.Write(response)
Expand All @@ -59,6 +70,7 @@ func(a *admin) Obat(w http.ResponseWriter, r *http.Request) {
var req domain.Obat
err := json.NewDecoder(r.Body).Decode(&req)
if err != nil {
a.gauge.ObatHistory.With(prometheus.Labels{"code": "500", "method": "POST", "type": "create"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.InternalServerError("cannot read request body"))
w.WriteHeader(500)
w.Write(response)
Expand All @@ -67,12 +79,17 @@ func(a *admin) Obat(w http.ResponseWriter, r *http.Request) {

data, err := a.service.CreateObat(req)
if err != nil {
a.gauge.ObatHistory.With(prometheus.Labels{"code": "400", "method": "POST", "type": "create"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.BadRequest(err.Error()))
w.WriteHeader(400)
w.Write(response)
return
}

a.gauge.Obat.Inc()
a.gauge.ObatHistory.With(prometheus.Labels{"code": "200", "method": "POST", "type": "create"}).Observe(time.Since(time.Now()).Seconds())
a.gauge.ObatUpgrade.With(prometheus.Labels{"type": "create"}).Inc()

response := util.WriteJSON(util.Success("success add to database", data))
w.WriteHeader(200)
w.Write(response)
Expand All @@ -83,6 +100,7 @@ func(a *admin) UpdateObat(w http.ResponseWriter, r *http.Request) {
var req domain.Obat
err := json.NewDecoder(r.Body).Decode(&req)
if err != nil {
a.gauge.ObatHistory.With(prometheus.Labels{"code": "500", "method": "PUT", "type": "update"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.InternalServerError("cannot read request body"))
w.WriteHeader(500)
w.Write(response)
Expand All @@ -97,12 +115,16 @@ func(a *admin) UpdateObat(w http.ResponseWriter, r *http.Request) {

data, err := a.service.UpdateObat(uint(id), req)
if err != nil {
a.gauge.ObatHistory.With(prometheus.Labels{"code": "400", "method": "PUT", "type": "update"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.BadRequest(err.Error()))
w.WriteHeader(400)
w.Write(response)
return
}

a.gauge.ObatHistory.With(prometheus.Labels{"code": "200", "method": "PUT", "type": "update"}).Observe(time.Since(time.Now()).Seconds())
a.gauge.ObatUpgrade.With(prometheus.Labels{"type": "update"}).Inc()

response := util.WriteJSON(util.Success("success update obat", data))
w.WriteHeader(200)
w.Write(response)
Expand All @@ -118,13 +140,16 @@ func(a *admin) DeleteObat(w http.ResponseWriter, r *http.Request) {

err = a.service.DeleteObat(uint(id))
if err != nil {
a.gauge.ObatHistory.With(prometheus.Labels{"code": "400", "method": "DELETE", "type": "delete"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.BadRequest(err.Error()))
w.WriteHeader(400)
w.Write(response)
return
}

w.WriteHeader(200)
a.gauge.ObatHistory.With(prometheus.Labels{"code": "204", "method": "DELETE", "type": "delete"}).Observe(time.Since(time.Now()).Seconds())
a.gauge.ObatUpgrade.With(prometheus.Labels{"type": "delete"}).Inc()
w.WriteHeader(204)
w.Write([]byte("successfull delete data"))
return
}
Expand All @@ -138,26 +163,33 @@ func(a *admin) DeletePenyakit(w http.ResponseWriter, r *http.Request) {

err = a.service.DeletePenyakit(uint(id))
if err != nil {
a.gauge.PenyakitHistory.With(prometheus.Labels{"code": "400", "method": "DELETE", "type": "delete"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.BadRequest(err.Error()))
w.WriteHeader(400)
w.Write(response)
return
}

w.WriteHeader(200)
a.gauge.PenyakitHistory.With(prometheus.Labels{"code": "204", "method": "DELETE", "type": "delete"}).Observe(time.Since(time.Now()).Seconds())
a.gauge.PenyakitUpgrade.With(prometheus.Labels{"type": "delete"}).Inc()
w.WriteHeader(204)
w.Write([]byte("successfull delete data"))
return
}

func(a *admin) Reported(w http.ResponseWriter, r *http.Request) {
data, err := a.service.Reported()
if err != nil {
a.gauge.KunjunganHistory.With(prometheus.Labels{"code": "400", "method": "GET", "type": "get"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.BadRequest(err.Error()))
w.WriteHeader(400)
w.Write(response)
return
}

a.gauge.KunjunganHistory.With(prometheus.Labels{"code": "200", "method": "GET", "type": "get"}).Observe(time.Since(time.Now()).Seconds())
a.gauge.Kunjungan.Set(float64(len(*data)))

response := util.WriteJSON(util.Success("data reported found", data))
w.WriteHeader(200)
w.Write(response)
Expand All @@ -167,12 +199,17 @@ func(a *admin) Reported(w http.ResponseWriter, r *http.Request) {
func(a *admin) ListAllUser(w http.ResponseWriter, r *http.Request) {
data, err := a.service.ListAllUser()
if err != nil {
a.gauge.UserHistory.With(prometheus.Labels{"code": "400", "method": "GET", "type": "get"}).Observe(time.Since(time.Now()).Seconds())

response := util.WriteJSON(util.BadRequest(err.Error()))
w.WriteHeader(400)
w.Write(response)
return
}

a.gauge.UserHistory.With(prometheus.Labels{"code": "200", "method": "GET", "type": "get"}).Observe(time.Since(time.Now()).Seconds())
a.gauge.User.Set(float64(len(*data)))

response := util.WriteJSON(util.Success("data user found", data))
w.WriteHeader(200)
w.Write(response)
Expand Down
18 changes: 17 additions & 1 deletion api/http/kunjungan.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@ package handler
import (
"encoding/json"
"net/http"
"time"

"github.com/prometheus/client_golang/prometheus"
"github.com/rulanugrh/larissa/internal/entity/domain"
"github.com/rulanugrh/larissa/internal/middleware"
"github.com/rulanugrh/larissa/internal/service"
"github.com/rulanugrh/larissa/internal/util"
"github.com/rulanugrh/larissa/pkg"
)

type KunjunganInterface interface {
Expand All @@ -17,18 +20,21 @@ type KunjunganInterface interface {

type kunjungan struct {
service service.KunjunganInterface
gauge *pkg.Data
}

func NewKunjungan(service service.KunjunganInterface) KunjunganInterface {
func NewKunjungan(service service.KunjunganInterface, gauge *pkg.Data) KunjunganInterface {
return &kunjungan{
service: service,
gauge: gauge,
}
}

func(k *kunjungan) Create(w http.ResponseWriter, r *http.Request) {
var req domain.Kunjungan
err := json.NewDecoder(r.Body).Decode(&req)
if err != nil {
k.gauge.KunjunganHistory.With(prometheus.Labels{"code": "500", "method": "POST", "type": "create"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.InternalServerError("cannot read request body"))
w.WriteHeader(500)
w.Write(response)
Expand All @@ -37,12 +43,17 @@ func(k *kunjungan) Create(w http.ResponseWriter, r *http.Request) {

data, err := k.service.Create(req)
if err != nil {
k.gauge.KunjunganHistory.With(prometheus.Labels{"code": "400", "method": "POST", "type": "create"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.BadRequest(err.Error()))
w.WriteHeader(400)
w.Write(response)
return
}

k.gauge.Kunjungan.Inc()
k.gauge.KunjunganHistory.With(prometheus.Labels{"code": "200", "method": "POST", "type": "create"}).Observe(time.Since(time.Now()).Seconds())
k.gauge.KunjunganUpgrade.With(prometheus.Labels{"type": "create"}).Inc()

response := util.WriteJSON(util.Created("recorde data kunjungan", data))
w.WriteHeader(201)
w.Write(response)
Expand All @@ -52,6 +63,7 @@ func(k *kunjungan) Create(w http.ResponseWriter, r *http.Request) {
func(k *kunjungan) Find(w http.ResponseWriter, r *http.Request) {
id, err := middleware.GetUserID(r)
if err != nil {
k.gauge.KunjunganHistory.With(prometheus.Labels{"code": "401", "method": "GET", "type": "getByID"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.Unauthorized(err.Error()))
w.WriteHeader(401)
w.Write(response)
Expand All @@ -60,12 +72,16 @@ func(k *kunjungan) Find(w http.ResponseWriter, r *http.Request) {

data, err := k.service.Find(id)
if err != nil {
k.gauge.KunjunganHistory.With(prometheus.Labels{"code": "400", "method": "GET", "type": "getByID"}).Observe(time.Since(time.Now()).Seconds())
response := util.WriteJSON(util.BadRequest(err.Error()))
w.WriteHeader(400)
w.Write(response)
return
}

k.gauge.KunjunganHistory.With(prometheus.Labels{"code": "200", "method": "GET", "type": "getByID"}).Observe(time.Since(time.Now()).Seconds())
k.gauge.KunjunganUpgrade.With(prometheus.Labels{"type": "getByID"}).Inc()

response := util.WriteJSON(util.Success("find kunjungan by this user id", data))
w.WriteHeader(200)
w.Write(response)
Expand Down
20 changes: 17 additions & 3 deletions api/http/obat.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ import (
"net/http"
"strconv"
"strings"
"time"

"github.com/prometheus/client_golang/prometheus"
"github.com/rulanugrh/larissa/internal/service"
"github.com/rulanugrh/larissa/internal/util"
"github.com/rulanugrh/larissa/pkg"
)

type ObatInterface interface {
Expand All @@ -16,11 +19,13 @@ type ObatInterface interface {

type obat struct {
service service.ObatInterface
gauge *pkg.Data
}

func NewObat(service service.ObatInterface) ObatInterface {
func NewObat(service service.ObatInterface, gauge *pkg.Data) ObatInterface {
return &obat{
service: service,
gauge: gauge,
}
}

Expand All @@ -30,15 +35,19 @@ func(o *obat) FindID(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(500)
return
}

data, err := o.service.FindID(uint(id))
if err != nil {
o.gauge.ObatHistory.With(prometheus.Labels{"code": "400", "method": "GET", "type": "getByID"}).Observe(time.Since(time.Now()).Seconds())

response := util.WriteJSON(util.BadRequest(err.Error()))
w.WriteHeader(400)
w.Write(response)
return
}

o.gauge.ObatHistory.With(prometheus.Labels{"code": "200", "method": "GET", "type": "getByID"}).Observe(time.Since(time.Now()).Seconds())

response := util.WriteJSON(util.Success("find obat by this id", data))
w.WriteHeader(200)
w.Write(response)
Expand All @@ -48,14 +57,19 @@ func(o *obat) FindID(w http.ResponseWriter, r *http.Request) {
func(o *obat) FindAll(w http.ResponseWriter, r *http.Request) {
data, err := o.service.FindAll()
if err != nil {
o.gauge.ObatHistory.With(prometheus.Labels{"code": "400", "method": "GET", "type": "get"}).Observe(time.Since(time.Now()).Seconds())

response := util.WriteJSON(util.BadRequest(err.Error()))
w.WriteHeader(400)
w.Write(response)
return
}

o.gauge.ObatHistory.With(prometheus.Labels{"code": "200", "method": "GET", "type": "get"}).Observe(time.Since(time.Now()).Seconds())
o.gauge.Obat.Set(float64(len(*data)))

response := util.WriteJSON(util.Success("sucessfull, obat found", data))
w.WriteHeader(200)
w.Write(response)
return
}
}

0 comments on commit 91b0fd1

Please sign in to comment.