Skip to content

Commit f4d311e

Browse files
authored
fix: Posthog events added (#6640)
* refact * app count events * app count events * app count events * app count events * query fix * policies included * wip * query fix posthog query * removed extra dockerFile count queries * fix * fix
1 parent c1038ba commit f4d311e

File tree

8 files changed

+1013
-179
lines changed

8 files changed

+1013
-179
lines changed

client/telemetry/TelemetryEventClient.go

Lines changed: 1 addition & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,8 @@ import (
2424
"fmt"
2525
cloudProviderIdentifier "github.com/devtron-labs/common-lib/cloud-provider-identifier"
2626
posthogTelemetry "github.com/devtron-labs/common-lib/telemetry"
27-
"github.com/devtron-labs/common-lib/utils/k8s/commonBean"
2827
"github.com/devtron-labs/devtron/api/helm-app/gRPC"
2928
installedAppReader "github.com/devtron-labs/devtron/pkg/appStore/installedApp/read"
30-
bean2 "github.com/devtron-labs/devtron/pkg/attributes/bean"
31-
"github.com/devtron-labs/devtron/pkg/auth/user/bean"
32-
bean3 "github.com/devtron-labs/devtron/pkg/cluster/bean"
3329
module2 "github.com/devtron-labs/devtron/pkg/module/bean"
3430
ucidService "github.com/devtron-labs/devtron/pkg/ucid"
3531
cron3 "github.com/devtron-labs/devtron/util/cron"
@@ -49,9 +45,7 @@ import (
4945
"github.com/go-pg/pg"
5046
"github.com/posthog/posthog-go"
5147
"github.com/robfig/cron/v3"
52-
"github.com/tidwall/gjson"
5348
"go.uber.org/zap"
54-
"k8s.io/apimachinery/pkg/version"
5549
)
5650

5751
type TelemetryEventClientImpl struct {
@@ -154,115 +148,6 @@ func (impl *TelemetryEventClientImpl) StopCron() {
154148
impl.cron.Stop()
155149
}
156150

157-
func (impl *TelemetryEventClientImpl) SummaryDetailsForTelemetry() (cluster []bean3.ClusterBean, user []bean.UserInfo,
158-
k8sServerVersion *version.Info, hostURL bool, ssoSetup bool, HelmAppAccessCount string, ChartStoreVisitCount string,
159-
SkippedOnboarding bool, HelmAppUpdateCounter string, helmChartSuccessfulDeploymentCount int, ExternalHelmAppClusterCount map[int32]int) {
160-
161-
discoveryClient, err := impl.K8sUtil.GetK8sDiscoveryClientInCluster()
162-
if err != nil {
163-
impl.logger.Errorw("exception caught inside telemetry summary event", "err", err)
164-
return
165-
}
166-
k8sServerVersion, err = discoveryClient.ServerVersion()
167-
if err != nil {
168-
impl.logger.Errorw("exception caught inside telemetry summary event", "err", err)
169-
return
170-
}
171-
172-
users, err := impl.userService.GetAll()
173-
if err != nil && err != pg.ErrNoRows {
174-
impl.logger.Errorw("exception caught inside telemetry summery event", "err", err)
175-
return
176-
}
177-
178-
clusters, err := impl.clusterService.FindAllActive()
179-
180-
if err != nil && err != pg.ErrNoRows {
181-
impl.logger.Errorw("exception caught inside telemetry summary event", "err", err)
182-
return
183-
}
184-
185-
hostURL = false
186-
187-
attribute, err := impl.attributeRepo.FindByKey(bean2.HostUrlKey)
188-
if err == nil && attribute.Id > 0 {
189-
hostURL = true
190-
}
191-
192-
attribute, err = impl.attributeRepo.FindByKey("HelmAppAccessCounter")
193-
194-
if err == nil {
195-
HelmAppAccessCount = attribute.Value
196-
}
197-
198-
attribute, err = impl.attributeRepo.FindByKey("ChartStoreVisitCount")
199-
200-
if err == nil {
201-
ChartStoreVisitCount = attribute.Value
202-
}
203-
204-
attribute, err = impl.attributeRepo.FindByKey("HelmAppUpdateCounter")
205-
206-
if err == nil {
207-
HelmAppUpdateCounter = attribute.Value
208-
}
209-
210-
helmChartSuccessfulDeploymentCount, err = impl.installedAppReadService.GetDeploymentSuccessfulStatusCountForTelemetry()
211-
212-
//externalHelmCount := make(map[int32]int)
213-
ExternalHelmAppClusterCount = make(map[int32]int)
214-
215-
for _, clusterDetail := range clusters {
216-
req := &gRPC.AppListRequest{}
217-
config := &gRPC.ClusterConfig{
218-
ApiServerUrl: clusterDetail.ServerUrl,
219-
Token: clusterDetail.Config[commonBean.BearerToken],
220-
ClusterId: int32(clusterDetail.Id),
221-
ClusterName: clusterDetail.ClusterName,
222-
InsecureSkipTLSVerify: clusterDetail.InsecureSkipTLSVerify,
223-
}
224-
225-
if clusterDetail.InsecureSkipTLSVerify == false {
226-
config.KeyData = clusterDetail.Config[commonBean.TlsKey]
227-
config.CertData = clusterDetail.Config[commonBean.CertData]
228-
config.CaData = clusterDetail.Config[commonBean.CertificateAuthorityData]
229-
}
230-
req.Clusters = append(req.Clusters, config)
231-
applicationStream, err := impl.helmAppClient.ListApplication(context.Background(), req)
232-
if err == nil {
233-
clusterList, err1 := applicationStream.Recv()
234-
if err1 != nil {
235-
impl.logger.Errorw("error in list helm applications streams recv", "err", err)
236-
}
237-
if err1 != nil && clusterList != nil && !clusterList.Errored {
238-
ExternalHelmAppClusterCount[clusterList.ClusterId] = len(clusterList.DeployedAppDetail)
239-
}
240-
} else {
241-
impl.logger.Errorw("error while fetching list application from kubelink", "err", err)
242-
}
243-
}
244-
245-
//getting userData from emailId
246-
userData, err := impl.userAttributesRepository.GetUserDataByEmailId(AdminEmailIdConst)
247-
248-
SkippedOnboardingValue := gjson.Get(userData, SkippedOnboardingConst).Str
249-
250-
if SkippedOnboardingValue == "true" {
251-
SkippedOnboarding = true
252-
} else {
253-
SkippedOnboarding = false
254-
}
255-
256-
ssoSetup = false
257-
258-
ssoConfig, err := impl.ssoLoginService.GetAll()
259-
if err == nil && len(ssoConfig) > 0 {
260-
ssoSetup = true
261-
}
262-
263-
return clusters, users, k8sServerVersion, hostURL, ssoSetup, HelmAppAccessCount, ChartStoreVisitCount, SkippedOnboarding, HelmAppUpdateCounter, helmChartSuccessfulDeploymentCount, ExternalHelmAppClusterCount
264-
}
265-
266151
// New methods for collecting additional telemetry metrics
267152

268153
func (impl *TelemetryEventClientImpl) SummaryEventForTelemetryEA() {
@@ -291,7 +176,7 @@ func (impl *TelemetryEventClientImpl) SendSummaryEvent(eventType string) error {
291176
return err
292177
}
293178

294-
clusters, users, k8sServerVersion, hostURL, ssoSetup, HelmAppAccessCount, ChartStoreVisitCount, SkippedOnboarding, HelmAppUpdateCounter, helmChartSuccessfulDeploymentCount, ExternalHelmAppClusterCount := impl.SummaryDetailsForTelemetry()
179+
clusters, users, k8sServerVersion, hostURL, ssoSetup, HelmAppAccessCount, ChartStoreVisitCount, SkippedOnboarding, HelmAppUpdateCounter, helmChartSuccessfulDeploymentCount, ExternalHelmAppClusterCount := impl.GetSummaryDetailsForTelemetry()
295180

296181
payload := &TelemetryEventEA{UCID: ucid, Timestamp: time.Now(), EventType: TelemetryEventType(eventType), DevtronVersion: "v1"}
297182
payload.ServerVersion = k8sServerVersion.String()

client/telemetry/TelemetryEventClientExtended.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func (impl *TelemetryEventClientImplExtended) SendSummaryEvent(eventType string)
182182
return err
183183
}
184184

185-
clusters, users, k8sServerVersion, hostURL, ssoSetup, HelmAppAccessCount, ChartStoreVisitCount, SkippedOnboarding, HelmAppUpdateCounter, HelmChartSuccessfulDeploymentCount, ExternalHelmAppClusterCount := impl.SummaryDetailsForTelemetry()
185+
clusters, users, k8sServerVersion, hostURL, ssoSetup, HelmAppAccessCount, ChartStoreVisitCount, SkippedOnboarding, HelmAppUpdateCounter, HelmChartSuccessfulDeploymentCount, ExternalHelmAppClusterCount := impl.GetSummaryDetailsForTelemetry()
186186
payload := &TelemetryEventDto{UCID: ucid, Timestamp: time.Now(), EventType: TelemetryEventType(eventType), DevtronVersion: "v1"}
187187
payload.ServerVersion = k8sServerVersion.String()
188188

@@ -345,12 +345,39 @@ func (impl *TelemetryEventClientImplExtended) SendSummaryEvent(eventType string)
345345
payload.JobPipelineTriggeredLast24h = impl.getJobPipelineTriggeredLast24h()
346346
payload.JobPipelineSucceededLast24h = impl.getJobPipelineSucceededLast24h()
347347
payload.UserCreatedPluginCount = impl.getUserCreatedPluginCount()
348-
payload.PolicyCount = impl.getPolicyCount()
348+
payload.DeploymentWindowPolicyCount = impl.getDeploymentWindowPolicyCount()
349+
payload.ApprovalPolicyCount = impl.getApprovalPolicyCount()
350+
payload.PluginPolicyCount = impl.getPluginPolicyCount()
351+
payload.TagsPolicyCount = impl.getTagsPolicyCount()
352+
payload.FilterConditionPolicyCount = impl.getFilterConditionPolicyCount()
353+
payload.LockDeploymentConfigurationPolicyCount = impl.getLockDeploymentConfigurationPolicyCount()
349354
payload.AppliedPolicyRowCount = impl.getAppliedPolicyRowCount()
350355
payload.PhysicalClusterCount, payload.IsolatedClusterCount = impl.getClusterCounts()
351356
payload.ActiveUsersLast30Days = impl.getActiveUsersLast30Days()
352357
payload.GitOpsPipelineCount = impl.getGitOpsPipelineCount()
353358
payload.HelmPipelineCount = impl.helmPipelineCount()
359+
payload.ProjectsWithZeroAppsCount = impl.getProjectsWithZeroAppsCount()
360+
payload.AppsWithPropagationTagsCount = impl.getAppsWithPropagationTagsCount()
361+
payload.AppsWithNonPropagationTagsCount = impl.getAppsWithNonPropagationTagsCount()
362+
payload.AppsWithDescriptionCount = impl.getAppsWithDescriptionCount()
363+
payload.AppsWithCatalogDataCount = impl.getAppsWithCatalogDataCount()
364+
payload.AppsWithReadmeDataCount = impl.getAppsWithReadmeDataCount()
365+
payload.HighestEnvironmentCountInApp = impl.getHighestEnvironmentCountInApp()
366+
payload.HighestAppCountInEnvironment = impl.getHighestAppCountInEnvironment()
367+
payload.HighestWorkflowCountInApp = impl.getHighestWorkflowCountInApp()
368+
payload.HighestEnvironmentCountInWorkflow = impl.getHighestEnvironmentCountInWorkflow()
369+
payload.HighestGitRepoCountInApp = impl.getHighestGitRepoCountInApp()
370+
payload.AppsWithIncludeExcludeFilesCount = impl.getAppsWithIncludeExcludeFilesCount()
371+
payload.DockerfileLanguagesList = impl.getDockerfileLanguagesList()
372+
payload.BuildpackLanguagesList = impl.getBuildpackLanguagesList()
373+
payload.AppsWithDeploymentChartCount = impl.getAppsWithDeploymentChartCount()
374+
payload.AppsWithRolloutChartCount = impl.getAppsWithRolloutChartCount()
375+
payload.AppsWithStatefulsetCount = impl.getAppsWithStatefulsetCount()
376+
payload.AppsWithJobsCronjobsCount = impl.getAppsWithJobsCronjobsCount()
377+
payload.EnvironmentsWithPatchStrategyCount = impl.getEnvironmentsWithPatchStrategyCount()
378+
payload.EnvironmentsWithReplaceStrategyCount = impl.getEnvironmentsWithReplaceStrategyCount()
379+
payload.ExternalConfigMapCount = impl.getExternalConfigMapCount()
380+
payload.InternalConfigMapCount = impl.getInternalConfigMapCount()
354381

355382
payload.ClusterProvider, err = impl.GetCloudProvider()
356383
if err != nil {

client/telemetry/bean.go

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -142,18 +142,45 @@ type TelemetryEventDto struct {
142142
ExternalHelmAppClusterCount map[int32]int `json:"ExternalHelmAppClusterCount"`
143143
ClusterProvider string `json:"clusterProvider,omitempty"`
144144
// New telemetry fields
145-
HelmAppCount int `json:"helmAppCount,omitempty"`
146-
DevtronAppCount int `json:"devtronAppCount,omitempty"`
147-
JobCount int `json:"jobCount,omitempty"`
148-
JobPipelineCount int `json:"jobPipelineCount,omitempty"`
149-
JobPipelineTriggeredLast24h int `json:"jobPipelineTriggeredLast24h,omitempty"`
150-
JobPipelineSucceededLast24h int `json:"jobPipelineSucceededLast24h,omitempty"`
151-
UserCreatedPluginCount int `json:"userCreatedPluginCount,omitempty"`
152-
PolicyCount int `json:"policyCount,omitempty"`
153-
AppliedPolicyRowCount int `json:"appliedPolicyRowCount,omitempty"`
154-
PhysicalClusterCount int `json:"physicalClusterCount,omitempty"`
155-
IsolatedClusterCount int `json:"isolatedClusterCount,omitempty"`
156-
ActiveUsersLast30Days int `json:"activeUsersLast30Days,omitempty"`
157-
GitOpsPipelineCount int `json:"gitOpsPipelineCount,omitempty"`
158-
HelmPipelineCount int `json:"helmPipelineCount,omitempty"`
145+
HelmAppCount int `json:"helmAppCount,omitempty"`
146+
DevtronAppCount int `json:"devtronAppCount,omitempty"`
147+
JobCount int `json:"jobCount,omitempty"`
148+
JobPipelineCount int `json:"jobPipelineCount,omitempty"`
149+
JobPipelineTriggeredLast24h int `json:"jobPipelineTriggeredLast24h,omitempty"`
150+
JobPipelineSucceededLast24h int `json:"jobPipelineSucceededLast24h,omitempty"`
151+
UserCreatedPluginCount int `json:"userCreatedPluginCount,omitempty"`
152+
DeploymentWindowPolicyCount int `json:"deploymentWindowPolicyCount,omitempty"`
153+
ApprovalPolicyCount int `json:"approvalPolicyCount,omitempty"`
154+
PluginPolicyCount int `json:"pluginPolicyCount,omitempty"`
155+
TagsPolicyCount int `json:"tagsPolicyCount,omitempty"`
156+
FilterConditionPolicyCount int `json:"filterConditionPolicyCount,omitempty"`
157+
LockDeploymentConfigurationPolicyCount int `json:"lockDeploymentConfigurationPolicyCount,omitempty"`
158+
AppliedPolicyRowCount int `json:"appliedPolicyRowCount,omitempty"`
159+
PhysicalClusterCount int `json:"physicalClusterCount,omitempty"`
160+
IsolatedClusterCount int `json:"isolatedClusterCount,omitempty"`
161+
ActiveUsersLast30Days int `json:"activeUsersLast30Days,omitempty"`
162+
GitOpsPipelineCount int `json:"gitOpsPipelineCount,omitempty"`
163+
HelmPipelineCount int `json:"helmPipelineCount,omitempty"`
164+
ProjectsWithZeroAppsCount int `json:"projectsWithZeroAppsCount,omitempty"`
165+
AppsWithPropagationTagsCount int `json:"appsWithPropagationTagsCount,omitempty"`
166+
AppsWithNonPropagationTagsCount int `json:"appsWithNonPropagationTagsCount,omitempty"`
167+
AppsWithDescriptionCount int `json:"appsWithDescriptionCount,omitempty"`
168+
AppsWithCatalogDataCount int `json:"appsWithCatalogDataCount,omitempty"`
169+
AppsWithReadmeDataCount int `json:"appsWithReadmeDataCount,omitempty"`
170+
HighestEnvironmentCountInApp int `json:"highestEnvironmentCountInApp,omitempty"`
171+
HighestAppCountInEnvironment int `json:"highestAppCountInEnvironment,omitempty"`
172+
HighestWorkflowCountInApp int `json:"highestWorkflowCountInApp,omitempty"`
173+
HighestEnvironmentCountInWorkflow int `json:"highestEnvironmentCountInWorkflow,omitempty"`
174+
HighestGitRepoCountInApp int `json:"highestGitRepoCountInApp,omitempty"`
175+
AppsWithIncludeExcludeFilesCount int `json:"appsWithIncludeExcludeFilesCount,omitempty"`
176+
DockerfileLanguagesList []string `json:"dockerfileLanguagesList,omitempty"`
177+
BuildpackLanguagesList []string `json:"buildpackLanguagesList,omitempty"`
178+
AppsWithDeploymentChartCount int `json:"appsWithDeploymentChartCount,omitempty"`
179+
AppsWithRolloutChartCount int `json:"appsWithRolloutChartCount,omitempty"`
180+
AppsWithStatefulsetCount int `json:"appsWithStatefulsetCount,omitempty"`
181+
AppsWithJobsCronjobsCount int `json:"appsWithJobsCronjobsCount,omitempty"`
182+
EnvironmentsWithPatchStrategyCount int `json:"environmentsWithPatchStrategyCount,omitempty"`
183+
EnvironmentsWithReplaceStrategyCount int `json:"environmentsWithReplaceStrategyCount,omitempty"`
184+
ExternalConfigMapCount int `json:"externalConfigMapCount,omitempty"`
185+
InternalConfigMapCount int `json:"internalConfigMapCount,omitempty"`
159186
}

client/telemetry/telemetryQueries.go

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
package telemetry
22

3+
import (
4+
"context"
5+
"errors"
6+
"github.com/devtron-labs/common-lib/utils/k8s/commonBean"
7+
"github.com/devtron-labs/devtron/api/helm-app/gRPC"
8+
bean3 "github.com/devtron-labs/devtron/pkg/attributes/bean"
9+
bean2 "github.com/devtron-labs/devtron/pkg/auth/user/bean"
10+
"github.com/devtron-labs/devtron/pkg/cluster/bean"
11+
"github.com/go-pg/pg"
12+
"github.com/tidwall/gjson"
13+
"k8s.io/apimachinery/pkg/version"
14+
)
15+
316
// EA-mode compatible telemetry queries - no imports needed for current methods
417

518
func (impl *TelemetryEventClientImpl) getHelmAppCount() int {
@@ -56,3 +69,112 @@ func (impl *TelemetryEventClientImpl) getActiveUsersLast30Days() int {
5669
impl.logger.Debugw("counted active users in last 30 days", "count", count)
5770
return count
5871
}
72+
73+
func (impl *TelemetryEventClientImpl) GetSummaryDetailsForTelemetry() (cluster []bean.ClusterBean, user []bean2.UserInfo,
74+
k8sServerVersion *version.Info, hostURL bool, ssoSetup bool, HelmAppAccessCount string, ChartStoreVisitCount string,
75+
SkippedOnboarding bool, HelmAppUpdateCounter string, helmChartSuccessfulDeploymentCount int, ExternalHelmAppClusterCount map[int32]int) {
76+
77+
discoveryClient, err := impl.K8sUtil.GetK8sDiscoveryClientInCluster()
78+
if err != nil {
79+
impl.logger.Errorw("exception caught inside telemetry summary event", "err", err)
80+
return
81+
}
82+
k8sServerVersion, err = discoveryClient.ServerVersion()
83+
if err != nil {
84+
impl.logger.Errorw("exception caught inside telemetry summary event", "err", err)
85+
return
86+
}
87+
88+
users, err := impl.userService.GetAll()
89+
if err != nil && !errors.Is(err, pg.ErrNoRows) {
90+
impl.logger.Errorw("exception caught inside telemetry summery event", "err", err)
91+
return
92+
}
93+
94+
clusters, err := impl.clusterService.FindAllActive()
95+
96+
if err != nil && !errors.Is(err, pg.ErrNoRows) {
97+
impl.logger.Errorw("exception caught inside telemetry summary event", "err", err)
98+
return
99+
}
100+
101+
hostURL = false
102+
103+
attribute, err := impl.attributeRepo.FindByKey(bean3.HostUrlKey)
104+
if err == nil && attribute.Id > 0 {
105+
hostURL = true
106+
}
107+
108+
attribute, err = impl.attributeRepo.FindByKey("HelmAppAccessCounter")
109+
110+
if err == nil {
111+
HelmAppAccessCount = attribute.Value
112+
}
113+
114+
attribute, err = impl.attributeRepo.FindByKey("ChartStoreVisitCount")
115+
116+
if err == nil {
117+
ChartStoreVisitCount = attribute.Value
118+
}
119+
120+
attribute, err = impl.attributeRepo.FindByKey("HelmAppUpdateCounter")
121+
122+
if err == nil {
123+
HelmAppUpdateCounter = attribute.Value
124+
}
125+
126+
helmChartSuccessfulDeploymentCount, err = impl.installedAppReadService.GetDeploymentSuccessfulStatusCountForTelemetry()
127+
128+
//externalHelmCount := make(map[int32]int)
129+
ExternalHelmAppClusterCount = make(map[int32]int)
130+
131+
for _, clusterDetail := range clusters {
132+
req := &gRPC.AppListRequest{}
133+
config := &gRPC.ClusterConfig{
134+
ApiServerUrl: clusterDetail.ServerUrl,
135+
Token: clusterDetail.Config[commonBean.BearerToken],
136+
ClusterId: int32(clusterDetail.Id),
137+
ClusterName: clusterDetail.ClusterName,
138+
InsecureSkipTLSVerify: clusterDetail.InsecureSkipTLSVerify,
139+
}
140+
141+
if clusterDetail.InsecureSkipTLSVerify == false {
142+
config.KeyData = clusterDetail.Config[commonBean.TlsKey]
143+
config.CertData = clusterDetail.Config[commonBean.CertData]
144+
config.CaData = clusterDetail.Config[commonBean.CertificateAuthorityData]
145+
}
146+
req.Clusters = append(req.Clusters, config)
147+
applicationStream, err := impl.helmAppClient.ListApplication(context.Background(), req)
148+
if err == nil {
149+
clusterList, err1 := applicationStream.Recv()
150+
if err1 != nil {
151+
impl.logger.Errorw("error in list helm applications streams recv", "err", err)
152+
}
153+
if err1 != nil && clusterList != nil && !clusterList.Errored {
154+
ExternalHelmAppClusterCount[clusterList.ClusterId] = len(clusterList.DeployedAppDetail)
155+
}
156+
} else {
157+
impl.logger.Errorw("error while fetching list application from kubelink", "err", err)
158+
}
159+
}
160+
161+
//getting userData from emailId
162+
userData, err := impl.userAttributesRepository.GetUserDataByEmailId(AdminEmailIdConst)
163+
164+
SkippedOnboardingValue := gjson.Get(userData, SkippedOnboardingConst).Str
165+
166+
if SkippedOnboardingValue == "true" {
167+
SkippedOnboarding = true
168+
} else {
169+
SkippedOnboarding = false
170+
}
171+
172+
ssoSetup = false
173+
174+
ssoConfig, err := impl.ssoLoginService.GetAll()
175+
if err == nil && len(ssoConfig) > 0 {
176+
ssoSetup = true
177+
}
178+
179+
return clusters, users, k8sServerVersion, hostURL, ssoSetup, HelmAppAccessCount, ChartStoreVisitCount, SkippedOnboarding, HelmAppUpdateCounter, helmChartSuccessfulDeploymentCount, ExternalHelmAppClusterCount
180+
}

0 commit comments

Comments
 (0)