mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-14 01:45:53 +08:00
chore/analytics (#1939)
* fix: not capturing empty filters * feat: removing signoz_ metrics using grep * fix: initialise companyDomain * feat: added ttl status
This commit is contained in:
parent
46e131698e
commit
e03b0aa45f
@ -3291,7 +3291,9 @@ func (r *ClickHouseReader) GetLogs(ctx context.Context, params *model.LogsFilter
|
|||||||
data := map[string]interface{}{
|
data := map[string]interface{}{
|
||||||
"lenFilters": lenFilters,
|
"lenFilters": lenFilters,
|
||||||
}
|
}
|
||||||
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data)
|
if lenFilters != 0 {
|
||||||
|
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data)
|
||||||
|
}
|
||||||
|
|
||||||
query := fmt.Sprintf("%s from %s.%s", constants.LogsSQLSelect, r.logsDB, r.logsTable)
|
query := fmt.Sprintf("%s from %s.%s", constants.LogsSQLSelect, r.logsDB, r.logsTable)
|
||||||
|
|
||||||
@ -3329,7 +3331,9 @@ func (r *ClickHouseReader) TailLogs(ctx context.Context, client *model.LogsTailC
|
|||||||
data := map[string]interface{}{
|
data := map[string]interface{}{
|
||||||
"lenFilters": lenFilters,
|
"lenFilters": lenFilters,
|
||||||
}
|
}
|
||||||
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data)
|
if lenFilters != 0 {
|
||||||
|
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data)
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
client.Error <- err
|
client.Error <- err
|
||||||
@ -3417,7 +3421,9 @@ func (r *ClickHouseReader) AggregateLogs(ctx context.Context, params *model.Logs
|
|||||||
data := map[string]interface{}{
|
data := map[string]interface{}{
|
||||||
"lenFilters": lenFilters,
|
"lenFilters": lenFilters,
|
||||||
}
|
}
|
||||||
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data)
|
if lenFilters != 0 {
|
||||||
|
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_LOGS_FILTERS, data)
|
||||||
|
}
|
||||||
|
|
||||||
query := ""
|
query := ""
|
||||||
if params.GroupBy != "" {
|
if params.GroupBy != "" {
|
||||||
|
@ -256,10 +256,14 @@ func extractDashboardMetaData(path string, r *http.Request) (map[string]interfac
|
|||||||
|
|
||||||
compositeMetricQuery, compositeMetricQueryExists := requestBody["compositeMetricQuery"]
|
compositeMetricQuery, compositeMetricQueryExists := requestBody["compositeMetricQuery"]
|
||||||
compositeMetricQueryMap := compositeMetricQuery.(map[string]interface{})
|
compositeMetricQueryMap := compositeMetricQuery.(map[string]interface{})
|
||||||
|
signozMetricFound := false
|
||||||
|
|
||||||
if compositeMetricQueryExists {
|
if compositeMetricQueryExists {
|
||||||
|
signozMetricFound = telemetry.GetInstance().CheckSigNozMetrics(compositeMetricQueryMap)
|
||||||
queryType, queryTypeExists := compositeMetricQueryMap["queryType"]
|
queryType, queryTypeExists := compositeMetricQueryMap["queryType"]
|
||||||
if queryTypeExists {
|
if queryTypeExists {
|
||||||
data["queryType"] = queryType
|
data["queryType"] = queryType
|
||||||
|
|
||||||
}
|
}
|
||||||
panelType, panelTypeExists := compositeMetricQueryMap["panelType"]
|
panelType, panelTypeExists := compositeMetricQueryMap["panelType"]
|
||||||
if panelTypeExists {
|
if panelTypeExists {
|
||||||
@ -272,15 +276,18 @@ func extractDashboardMetaData(path string, r *http.Request) (map[string]interfac
|
|||||||
data["datasource"] = datasource
|
data["datasource"] = datasource
|
||||||
}
|
}
|
||||||
|
|
||||||
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_DASHBOARDS_METADATA, data, false)
|
if !signozMetricFound {
|
||||||
|
telemetry.GetInstance().AddActiveMetricsUser()
|
||||||
|
telemetry.GetInstance().SendEvent(telemetry.TELEMETRY_EVENT_DASHBOARDS_METADATA, data, false)
|
||||||
|
}
|
||||||
|
|
||||||
return data, true
|
return data, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func getActiveMetricsOrLogs(path string, r *http.Request) {
|
func getActiveLogs(path string, r *http.Request) {
|
||||||
if path == "/api/v1/dashboards/{uuid}" {
|
// if path == "/api/v1/dashboards/{uuid}" {
|
||||||
telemetry.GetInstance().AddActiveMetricsUser()
|
// telemetry.GetInstance().AddActiveMetricsUser()
|
||||||
}
|
// }
|
||||||
if path == "/api/v1/logs" {
|
if path == "/api/v1/logs" {
|
||||||
hasFilters := len(r.URL.Query().Get("q"))
|
hasFilters := len(r.URL.Query().Get("q"))
|
||||||
if hasFilters > 0 {
|
if hasFilters > 0 {
|
||||||
@ -297,7 +304,7 @@ func (s *Server) analyticsMiddleware(next http.Handler) http.Handler {
|
|||||||
path, _ := route.GetPathTemplate()
|
path, _ := route.GetPathTemplate()
|
||||||
|
|
||||||
dashboardMetadata, metadataExists := extractDashboardMetaData(path, r)
|
dashboardMetadata, metadataExists := extractDashboardMetaData(path, r)
|
||||||
getActiveMetricsOrLogs(path, r)
|
getActiveLogs(path, r)
|
||||||
|
|
||||||
lrw := NewLoggingResponseWriter(w)
|
lrw := NewLoggingResponseWriter(w)
|
||||||
next.ServeHTTP(lrw, r)
|
next.ServeHTTP(lrw, r)
|
||||||
|
@ -125,6 +125,13 @@ func (mds *ModelDaoSqlite) initializeOrgPreferences(ctx context.Context) error {
|
|||||||
// set telemetry fields from userPreferences
|
// set telemetry fields from userPreferences
|
||||||
telemetry.GetInstance().SetDistinctId(org.Id)
|
telemetry.GetInstance().SetDistinctId(org.Id)
|
||||||
|
|
||||||
|
users, _ := mds.GetUsers(ctx)
|
||||||
|
countUsers := len(users)
|
||||||
|
telemetry.GetInstance().SetCountUsers(int8(countUsers))
|
||||||
|
if countUsers > 0 {
|
||||||
|
telemetry.GetInstance().SetCompanyDomain(users[countUsers-1].Email)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package telemetry
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -69,6 +70,23 @@ func (a *Telemetry) IsSampled() bool {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (telemetry *Telemetry) CheckSigNozMetrics(compositeMetricQueryMap map[string]interface{}) bool {
|
||||||
|
|
||||||
|
builderQueries, builderQueriesExists := compositeMetricQueryMap["builderQueries"]
|
||||||
|
if builderQueriesExists {
|
||||||
|
builderQueriesStr, _ := json.Marshal(builderQueries)
|
||||||
|
return strings.Contains(string(builderQueriesStr), "signoz_")
|
||||||
|
}
|
||||||
|
|
||||||
|
promQueries, promQueriesExists := compositeMetricQueryMap["promQueries"]
|
||||||
|
if promQueriesExists {
|
||||||
|
promQueriesStr, _ := json.Marshal(promQueries)
|
||||||
|
return strings.Contains(string(promQueriesStr), "signoz_")
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (telemetry *Telemetry) AddActiveTracesUser() {
|
func (telemetry *Telemetry) AddActiveTracesUser() {
|
||||||
telemetry.activeUser["traces"] = 1
|
telemetry.activeUser["traces"] = 1
|
||||||
}
|
}
|
||||||
@ -92,6 +110,7 @@ type Telemetry struct {
|
|||||||
maxRandInt int
|
maxRandInt int
|
||||||
rateLimits map[string]int8
|
rateLimits map[string]int8
|
||||||
activeUser map[string]int8
|
activeUser map[string]int8
|
||||||
|
countUsers int8
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTelemetry() {
|
func createTelemetry() {
|
||||||
@ -152,11 +171,19 @@ func createTelemetry() {
|
|||||||
|
|
||||||
getLogsInfoInLastHeartBeatInterval, _ := telemetry.reader.GetLogsInfoInLastHeartBeatInterval(context.Background())
|
getLogsInfoInLastHeartBeatInterval, _ := telemetry.reader.GetLogsInfoInLastHeartBeatInterval(context.Background())
|
||||||
|
|
||||||
|
traceTTL, _ := telemetry.reader.GetTTL(context.Background(), &model.GetTTLParams{Type: constants.TraceTTL})
|
||||||
|
metricsTTL, _ := telemetry.reader.GetTTL(context.Background(), &model.GetTTLParams{Type: constants.MetricsTTL})
|
||||||
|
logsTTL, _ := telemetry.reader.GetTTL(context.Background(), &model.GetTTLParams{Type: constants.LogsTTL})
|
||||||
|
|
||||||
data := map[string]interface{}{
|
data := map[string]interface{}{
|
||||||
"totalSpans": totalSpans,
|
"totalSpans": totalSpans,
|
||||||
"spansInLastHeartBeatInterval": spansInLastHeartBeatInterval,
|
"spansInLastHeartBeatInterval": spansInLastHeartBeatInterval,
|
||||||
"getSamplesInfoInLastHeartBeatInterval": getSamplesInfoInLastHeartBeatInterval,
|
"getSamplesInfoInLastHeartBeatInterval": getSamplesInfoInLastHeartBeatInterval,
|
||||||
"getLogsInfoInLastHeartBeatInterval": getLogsInfoInLastHeartBeatInterval,
|
"getLogsInfoInLastHeartBeatInterval": getLogsInfoInLastHeartBeatInterval,
|
||||||
|
"countUsers": telemetry.countUsers,
|
||||||
|
"metricsTTLStatus": metricsTTL.Status,
|
||||||
|
"tracesTTLStatus": traceTTL.Status,
|
||||||
|
"logsTTLStatus": logsTTL.Status,
|
||||||
}
|
}
|
||||||
for key, value := range tsInfo {
|
for key, value := range tsInfo {
|
||||||
data[key] = value
|
data[key] = value
|
||||||
@ -197,7 +224,7 @@ func (a *Telemetry) IdentifyUser(user *model.User) {
|
|||||||
if !a.isTelemetryEnabled() || a.isTelemetryAnonymous() {
|
if !a.isTelemetryEnabled() || a.isTelemetryAnonymous() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
a.setCompanyDomain(user.Email)
|
a.SetCompanyDomain(user.Email)
|
||||||
|
|
||||||
a.operator.Enqueue(analytics.Identify{
|
a.operator.Enqueue(analytics.Identify{
|
||||||
UserId: a.ipAddress,
|
UserId: a.ipAddress,
|
||||||
@ -213,7 +240,11 @@ func (a *Telemetry) IdentifyUser(user *model.User) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Telemetry) setCompanyDomain(email string) {
|
func (a *Telemetry) SetCountUsers(countUsers int8) {
|
||||||
|
a.countUsers = countUsers
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Telemetry) SetCompanyDomain(email string) {
|
||||||
|
|
||||||
email_split := strings.Split(email, "@")
|
email_split := strings.Split(email, "@")
|
||||||
if len(email_split) != 2 {
|
if len(email_split) != 2 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user