mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-09-22 20:53:13 +08:00
commit
baf8bf73d5
@ -6,6 +6,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/posthog/posthog-go"
|
||||||
"go.signoz.io/query-service/druidQuery"
|
"go.signoz.io/query-service/druidQuery"
|
||||||
"go.signoz.io/query-service/godruid"
|
"go.signoz.io/query-service/godruid"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
@ -24,13 +25,17 @@ type APIHandler struct {
|
|||||||
apiPrefix string
|
apiPrefix string
|
||||||
client *godruid.Client
|
client *godruid.Client
|
||||||
sqlClient *druidQuery.SqlClient
|
sqlClient *druidQuery.SqlClient
|
||||||
|
pc *posthog.Client
|
||||||
|
distinctId string
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewAPIHandler returns an APIHandler
|
// NewAPIHandler returns an APIHandler
|
||||||
func NewAPIHandler(client *godruid.Client, sqlClient *druidQuery.SqlClient) *APIHandler {
|
func NewAPIHandler(client *godruid.Client, sqlClient *druidQuery.SqlClient, pc *posthog.Client, distinctId string) *APIHandler {
|
||||||
aH := &APIHandler{
|
aH := &APIHandler{
|
||||||
client: client,
|
client: client,
|
||||||
sqlClient: sqlClient,
|
sqlClient: sqlClient,
|
||||||
|
pc: pc,
|
||||||
|
distinctId: distinctId,
|
||||||
}
|
}
|
||||||
|
|
||||||
return aH
|
return aH
|
||||||
@ -53,6 +58,7 @@ type structuredError struct {
|
|||||||
// RegisterRoutes registers routes for this handler on the given router
|
// RegisterRoutes registers routes for this handler on the given router
|
||||||
func (aH *APIHandler) RegisterRoutes(router *mux.Router) {
|
func (aH *APIHandler) RegisterRoutes(router *mux.Router) {
|
||||||
|
|
||||||
|
router.HandleFunc("/api/v1/user", aH.user).Methods(http.MethodPost)
|
||||||
router.HandleFunc("/api/v1/get_percentiles", aH.getApplicationPercentiles).Methods(http.MethodGet)
|
router.HandleFunc("/api/v1/get_percentiles", aH.getApplicationPercentiles).Methods(http.MethodGet)
|
||||||
router.HandleFunc("/api/v1/services", aH.getServices).Methods(http.MethodGet)
|
router.HandleFunc("/api/v1/services", aH.getServices).Methods(http.MethodGet)
|
||||||
router.HandleFunc("/api/v1/services/list", aH.getServicesList).Methods(http.MethodGet)
|
router.HandleFunc("/api/v1/services/list", aH.getServicesList).Methods(http.MethodGet)
|
||||||
@ -66,6 +72,31 @@ func (aH *APIHandler) RegisterRoutes(router *mux.Router) {
|
|||||||
router.HandleFunc("/api/v1/usage", aH.getUsage).Methods(http.MethodGet)
|
router.HandleFunc("/api/v1/usage", aH.getUsage).Methods(http.MethodGet)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (aH *APIHandler) user(w http.ResponseWriter, r *http.Request) {
|
||||||
|
email := r.URL.Query().Get("email")
|
||||||
|
|
||||||
|
var err error
|
||||||
|
if len(email) == 0 {
|
||||||
|
err = fmt.Errorf("Email param is missing")
|
||||||
|
}
|
||||||
|
if aH.handleError(w, err, http.StatusBadRequest) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
(*aH.pc).Enqueue(posthog.Identify{
|
||||||
|
DistinctId: aH.distinctId,
|
||||||
|
Properties: posthog.NewProperties().
|
||||||
|
Set("email", email),
|
||||||
|
})
|
||||||
|
|
||||||
|
_, err = http.Get(fmt.Sprintf("https://api.telegram.org/bot1518273960:AAHcgVvym9a0Qkl-PKiCI84X1VZaVbkTud0/sendMessage?chat_id=351813222&text=%s", email))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
zap.S().Debug(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (aH *APIHandler) getOperations(w http.ResponseWriter, r *http.Request) {
|
func (aH *APIHandler) getOperations(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
@ -171,6 +202,13 @@ func (aH *APIHandler) getServices(w http.ResponseWriter, r *http.Request) {
|
|||||||
if aH.handleError(w, err, http.StatusBadRequest) {
|
if aH.handleError(w, err, http.StatusBadRequest) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if len(*result) != 4 {
|
||||||
|
(*aH.pc).Enqueue(posthog.Capture{
|
||||||
|
DistinctId: distinctId,
|
||||||
|
Event: "Different Number of Services",
|
||||||
|
Properties: posthog.NewProperties().Set("number", len(*result)),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
aH.writeJSON(w, r, result)
|
aH.writeJSON(w, r, result)
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,12 @@ package app
|
|||||||
import (
|
import (
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
"github.com/gorilla/handlers"
|
"github.com/gorilla/handlers"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/posthog/posthog-go"
|
||||||
"github.com/soheilhy/cmux"
|
"github.com/soheilhy/cmux"
|
||||||
"go.signoz.io/query-service/druidQuery"
|
"go.signoz.io/query-service/druidQuery"
|
||||||
"go.signoz.io/query-service/godruid"
|
"go.signoz.io/query-service/godruid"
|
||||||
@ -74,8 +78,14 @@ func NewServer(serverOptions *ServerOptions) (*Server, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var posthogClient posthog.Client
|
||||||
|
var distinctId string
|
||||||
|
|
||||||
func createHTTPServer(druidClientUrl string) *http.Server {
|
func createHTTPServer(druidClientUrl string) *http.Server {
|
||||||
|
|
||||||
|
posthogClient = posthog.New("H-htDCae7CR3RV57gUzmol6IAKtm5IMCvbcm_fwnL-w")
|
||||||
|
distinctId = uuid.New().String()
|
||||||
|
|
||||||
client := godruid.Client{
|
client := godruid.Client{
|
||||||
Url: druidClientUrl,
|
Url: druidClientUrl,
|
||||||
Debug: true,
|
Debug: true,
|
||||||
@ -86,9 +96,12 @@ func createHTTPServer(druidClientUrl string) *http.Server {
|
|||||||
Debug: true,
|
Debug: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
apiHandler := NewAPIHandler(&client, &sqlClient)
|
apiHandler := NewAPIHandler(&client, &sqlClient, &posthogClient, distinctId)
|
||||||
r := NewRouter()
|
r := NewRouter()
|
||||||
|
|
||||||
|
r.Use(analyticsMiddleware)
|
||||||
|
r.Use(loggingMiddleware)
|
||||||
|
|
||||||
apiHandler.RegisterRoutes(r)
|
apiHandler.RegisterRoutes(r)
|
||||||
|
|
||||||
// c := cors.New(cors.Options{
|
// c := cors.New(cors.Options{
|
||||||
@ -107,6 +120,30 @@ func createHTTPServer(druidClientUrl string) *http.Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loggingMiddleware(next http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
route := mux.CurrentRoute(r)
|
||||||
|
path, _ := route.GetPathTemplate()
|
||||||
|
startTime := time.Now()
|
||||||
|
next.ServeHTTP(w, r)
|
||||||
|
zap.S().Info(path, "\ttimeTaken: ", time.Now().Sub(startTime))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func analyticsMiddleware(next http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
route := mux.CurrentRoute(r)
|
||||||
|
path, _ := route.GetPathTemplate()
|
||||||
|
|
||||||
|
posthogClient.Enqueue(posthog.Capture{
|
||||||
|
DistinctId: distinctId,
|
||||||
|
Event: path,
|
||||||
|
})
|
||||||
|
|
||||||
|
next.ServeHTTP(w, r)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// initListener initialises listeners of the server
|
// initListener initialises listeners of the server
|
||||||
func (s *Server) initListener() (cmux.CMux, error) {
|
func (s *Server) initListener() (cmux.CMux, error) {
|
||||||
if s.separatePorts { // use separate ports and listeners each for gRPC and HTTP requests
|
if s.separatePorts { // use separate ports and listeners each for gRPC and HTTP requests
|
||||||
|
@ -92,7 +92,7 @@ func GetServicesList(client *SqlClient) (*[]string, error) {
|
|||||||
return nil, fmt.Errorf("Something went wrong in druid query")
|
return nil, fmt.Errorf("Something went wrong in druid query")
|
||||||
}
|
}
|
||||||
|
|
||||||
zap.S().Info(string(response))
|
// zap.S().Info(string(response))
|
||||||
|
|
||||||
res := new([][]string)
|
res := new([][]string)
|
||||||
err = json.Unmarshal(response, res)
|
err = json.Unmarshal(response, res)
|
||||||
|
@ -3,15 +3,18 @@ module go.signoz.io/query-service
|
|||||||
go 1.14
|
go 1.14
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/google/uuid v1.1.1
|
||||||
github.com/gorilla/handlers v1.5.1
|
github.com/gorilla/handlers v1.5.1
|
||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
github.com/jaegertracing/jaeger v1.21.0
|
github.com/jaegertracing/jaeger v1.21.0
|
||||||
github.com/ory/viper v1.7.5
|
github.com/ory/viper v1.7.5
|
||||||
|
github.com/posthog/posthog-go v0.0.0-20200525173953-e46dc8e6b89b
|
||||||
github.com/rs/cors v1.7.0
|
github.com/rs/cors v1.7.0
|
||||||
github.com/shunfei/godruid v0.0.0-20171207111340-296a59dd69bd
|
github.com/shunfei/godruid v0.0.0-20171207111340-296a59dd69bd
|
||||||
github.com/sirupsen/logrus v1.7.0
|
github.com/sirupsen/logrus v1.7.0
|
||||||
github.com/smartystreets/goconvey v1.6.4
|
github.com/smartystreets/goconvey v1.6.4
|
||||||
github.com/soheilhy/cmux v0.1.4
|
github.com/soheilhy/cmux v0.1.4
|
||||||
github.com/spf13/viper v1.6.2
|
github.com/spf13/viper v1.6.2
|
||||||
|
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect
|
||||||
go.uber.org/zap v1.16.0
|
go.uber.org/zap v1.16.0
|
||||||
)
|
)
|
||||||
|
@ -221,6 +221,7 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
|||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
||||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||||
@ -403,6 +404,8 @@ github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6J
|
|||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||||
|
github.com/posthog/posthog-go v0.0.0-20200525173953-e46dc8e6b89b h1:a8lLvAV+8OQXnG18ZOV5ctFQY7jLHa3brA9BBhe1SVs=
|
||||||
|
github.com/posthog/posthog-go v0.0.0-20200525173953-e46dc8e6b89b/go.mod h1:s7IZAf1WuSPTb/R/agnboYa+gDnoKGdqIk7p2aFHDYs=
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
||||||
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
||||||
@ -512,6 +515,8 @@ github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHM
|
|||||||
github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
|
github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
|
||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||||
|
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c h1:3lbZUMbMiGUW/LMkfsEABsc5zNT9+b1CvsJx47JzJ8g=
|
||||||
|
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c/go.mod h1:UrdRz5enIKZ63MEE3IF9l2/ebyx59GyGgPi+tICQdmM=
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
|
Loading…
x
Reference in New Issue
Block a user