Skip to content

Commit a26a28c

Browse files
committed
boiler plate
1 parent 23570cc commit a26a28c

File tree

3 files changed

+221
-0
lines changed

3 files changed

+221
-0
lines changed

client/telemetry/TelemetryEventClient.go

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/devtron-labs/devtron/pkg/auth/user/bean"
3232
bean3 "github.com/devtron-labs/devtron/pkg/cluster/bean"
3333
module2 "github.com/devtron-labs/devtron/pkg/module/bean"
34+
3435
ucidService "github.com/devtron-labs/devtron/pkg/ucid"
3536
cron3 "github.com/devtron-labs/devtron/util/cron"
3637
"go.opentelemetry.io/otel"
@@ -39,6 +40,9 @@ import (
3940

4041
"github.com/devtron-labs/common-lib/utils/k8s"
4142
"github.com/devtron-labs/devtron/internal/sql/repository"
43+
appRepository "github.com/devtron-labs/devtron/internal/sql/repository/app"
44+
"github.com/devtron-labs/devtron/internal/sql/repository/helper"
45+
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig"
4246
"github.com/devtron-labs/devtron/pkg/auth/sso"
4347
user2 "github.com/devtron-labs/devtron/pkg/auth/user"
4448
"github.com/devtron-labs/devtron/pkg/cluster"
@@ -75,6 +79,10 @@ type TelemetryEventClientImpl struct {
7579
cloudProviderIdentifierService cloudProviderIdentifier.ProviderIdentifierService
7680
telemetryConfig TelemetryConfig
7781
globalEnvVariables *util.GlobalEnvVariables
82+
// Additional repositories for telemetry metrics (passed from TelemetryEventClientExtended)
83+
appRepository appRepository.AppRepository
84+
ciWorkflowRepository pipelineConfig.CiWorkflowRepository
85+
cdWorkflowRepository pipelineConfig.CdWorkflowRepository
7886
}
7987

8088
type TelemetryEventClient interface {
@@ -120,6 +128,7 @@ func NewTelemetryEventClientImpl(logger *zap.SugaredLogger, client *http.Client,
120128
telemetryConfig: TelemetryConfig{},
121129
globalEnvVariables: envVariables.GlobalEnvVariables,
122130
userAttributesRepository: userAttributesRepository,
131+
// Note: appRepository, ciWorkflowRepository, cdWorkflowRepository will be set by TelemetryEventClientExtended
123132
}
124133

125134
watcher.HeartbeatEventForTelemetry()
@@ -263,6 +272,166 @@ func (impl *TelemetryEventClientImpl) SummaryDetailsForTelemetry() (cluster []be
263272
return clusters, users, k8sServerVersion, hostURL, ssoSetup, HelmAppAccessCount, ChartStoreVisitCount, SkippedOnboarding, HelmAppUpdateCounter, helmChartSuccessfulDeploymentCount, ExternalHelmAppClusterCount
264273
}
265274

275+
// New methods for collecting additional telemetry metrics
276+
277+
func (impl *TelemetryEventClientImpl) getHelmAppCount() int {
278+
count, err := impl.installedAppReadService.GetDeploymentSuccessfulStatusCountForTelemetry()
279+
if err != nil {
280+
impl.logger.Errorw("error getting helm app count", "err", err)
281+
return -1
282+
}
283+
return count
284+
}
285+
286+
func (impl *TelemetryEventClientImpl) getDevtronAppCount() int {
287+
// Use a simple approach - count all active apps that are not jobs
288+
if impl.appRepository == nil {
289+
impl.logger.Warnw("appRepository not available for devtron app count")
290+
return -1
291+
}
292+
293+
// Get all active apps and filter out jobs
294+
apps, err := impl.appRepository.FindAll()
295+
if err != nil {
296+
impl.logger.Errorw("error getting all apps for devtron app count", "err", err)
297+
return -1
298+
}
299+
300+
devtronAppCount := 0
301+
for _, app := range apps {
302+
if app.AppType != helper.Job && app.Active {
303+
devtronAppCount++
304+
}
305+
}
306+
307+
return devtronAppCount
308+
}
309+
310+
func (impl *TelemetryEventClientImpl) getJobCount() int {
311+
// Use a simple approach - count all active apps that are jobs
312+
if impl.appRepository == nil {
313+
impl.logger.Warnw("appRepository not available for job count")
314+
return -1
315+
}
316+
317+
apps, err := impl.appRepository.FindAll()
318+
if err != nil {
319+
impl.logger.Errorw("error getting all apps for job count", "err", err)
320+
return -1
321+
}
322+
323+
jobCount := 0
324+
for _, app := range apps {
325+
if app.AppType == helper.Job && app.Active {
326+
jobCount++
327+
}
328+
}
329+
330+
return jobCount
331+
}
332+
333+
func (impl *TelemetryEventClientImpl) getUserCreatedPluginCount() int {
334+
// Placeholder implementation - would need plugin repository
335+
// For now, return 0 as we don't have the plugin repository dependency
336+
impl.logger.Debugw("getUserCreatedPluginCount not fully implemented - returning 0")
337+
return 0
338+
}
339+
340+
func (impl *TelemetryEventClientImpl) getPolicyCount() map[string]int {
341+
// Placeholder implementation - would need policy repository
342+
// For now, return empty map as we don't have the policy repository dependency
343+
policyCount := make(map[string]int)
344+
policyCount["global"] = 0
345+
policyCount["cluster"] = 0
346+
policyCount["environment"] = 0
347+
policyCount["application"] = 0
348+
349+
impl.logger.Debugw("getPolicyCount not fully implemented - returning zeros")
350+
return policyCount
351+
}
352+
353+
func (impl *TelemetryEventClientImpl) getClusterCounts() (physicalCount int, isolatedCount int) {
354+
clusters, err := impl.clusterService.FindAllActive()
355+
if err != nil {
356+
impl.logger.Errorw("error getting cluster counts", "err", err)
357+
return -1, -1
358+
}
359+
360+
physicalCount = 0
361+
isolatedCount = 0
362+
363+
for _, cluster := range clusters {
364+
if cluster.IsVirtualCluster {
365+
isolatedCount++
366+
} else {
367+
physicalCount++
368+
}
369+
}
370+
371+
return physicalCount, isolatedCount
372+
}
373+
374+
func (impl *TelemetryEventClientImpl) getJobPipelineCount() int {
375+
// Simplified implementation - count job apps as proxy for job pipelines
376+
// In a more complete implementation, you would count actual CI pipelines for job apps
377+
jobCount := impl.getJobCount()
378+
if jobCount <= 0 {
379+
return 0
380+
}
381+
382+
// For now, assume each job has at least one pipeline
383+
// This is a simplification - in reality you'd need to query the CI pipeline repository
384+
impl.logger.Debugw("getJobPipelineCount using simplified approach", "jobCount", jobCount)
385+
return jobCount
386+
}
387+
388+
func (impl *TelemetryEventClientImpl) getJobPipelineTriggeredLast24h() int {
389+
// Simplified implementation - would need more complex query to filter by job apps
390+
if impl.ciWorkflowRepository == nil {
391+
impl.logger.Warnw("ciWorkflowRepository not available for job pipeline triggered count")
392+
return -1
393+
}
394+
395+
// Get total triggered workflows in last 24h (includes all apps, not just jobs)
396+
// This is an approximation - in reality you'd need to filter by job apps
397+
count, err := impl.ciWorkflowRepository.FindAllTriggeredWorkflowCountInLast24Hour()
398+
if err != nil {
399+
impl.logger.Errorw("error getting triggered workflow count", "err", err)
400+
return -1
401+
}
402+
403+
// Estimate job pipeline triggers as a fraction of total triggers
404+
// This is a rough approximation
405+
jobCount := impl.getJobCount()
406+
totalAppCount := impl.getDevtronAppCount() + jobCount
407+
if totalAppCount > 0 {
408+
estimatedJobTriggers := (count * jobCount) / totalAppCount
409+
impl.logger.Debugw("estimated job pipeline triggers", "total", count, "estimated", estimatedJobTriggers)
410+
return estimatedJobTriggers
411+
}
412+
413+
return 0
414+
}
415+
416+
func (impl *TelemetryEventClientImpl) getJobPipelineSucceededLast24h() int {
417+
// Placeholder implementation - would need complex query to count successful job pipeline runs
418+
// For now, return 0 as this requires joining multiple tables and filtering by job apps
419+
impl.logger.Debugw("getJobPipelineSucceededLast24h not fully implemented - returning 0")
420+
return 0
421+
}
422+
423+
func (impl *TelemetryEventClientImpl) getAppliedPolicyRowCount() map[string]int {
424+
// Placeholder implementation - would need policy enforcement/application tables
425+
appliedCount := make(map[string]int)
426+
appliedCount["global"] = 0
427+
appliedCount["cluster"] = 0
428+
appliedCount["environment"] = 0
429+
appliedCount["application"] = 0
430+
431+
impl.logger.Debugw("getAppliedPolicyRowCount not fully implemented - returning zeros")
432+
return appliedCount
433+
}
434+
266435
func (impl *TelemetryEventClientImpl) SummaryEventForTelemetryEA() {
267436
err := impl.SendSummaryEvent(string(Summary))
268437
if err != nil {
@@ -310,6 +479,18 @@ func (impl *TelemetryEventClientImpl) SendSummaryEvent(eventType string) error {
310479
payload.HelmChartSuccessfulDeploymentCount = helmChartSuccessfulDeploymentCount
311480
payload.ExternalHelmAppClusterCount = ExternalHelmAppClusterCount
312481

482+
// Collect new telemetry metrics
483+
payload.HelmAppCount = impl.getHelmAppCount()
484+
payload.DevtronAppCount = impl.getDevtronAppCount()
485+
payload.JobCount = impl.getJobCount()
486+
payload.JobPipelineCount = impl.getJobPipelineCount()
487+
payload.JobPipelineTriggeredLast24h = impl.getJobPipelineTriggeredLast24h()
488+
payload.JobPipelineSucceededLast24h = impl.getJobPipelineSucceededLast24h()
489+
payload.UserCreatedPluginCount = impl.getUserCreatedPluginCount()
490+
payload.PolicyCount = impl.getPolicyCount()
491+
payload.AppliedPolicyRowCount = impl.getAppliedPolicyRowCount()
492+
payload.PhysicalClusterCount, payload.IsolatedClusterCount = impl.getClusterCounts()
493+
313494
payload.ClusterProvider, err = impl.GetCloudProvider()
314495
if err != nil {
315496
impl.logger.Errorw("error while getting cluster provider", "error", err)

client/telemetry/TelemetryEventClientExtended.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ func NewTelemetryEventClientImplExtended(logger *zap.SugaredLogger, client *http
126126
cloudProviderIdentifierService: cloudProviderIdentifierService,
127127
telemetryConfig: TelemetryConfig{},
128128
globalEnvVariables: envVariables.GlobalEnvVariables,
129+
// Pass existing repositories from TelemetryEventClientExtended to embedded TelemetryEventClientImpl
130+
appRepository: appRepository,
131+
ciWorkflowRepository: ciWorkflowRepository,
132+
cdWorkflowRepository: cdWorkflowRepository,
129133
},
130134
}
131135

@@ -319,6 +323,18 @@ func (impl *TelemetryEventClientImplExtended) SendSummaryEvent(eventType string)
319323
payload.HelmChartSuccessfulDeploymentCount = HelmChartSuccessfulDeploymentCount
320324
payload.ExternalHelmAppClusterCount = ExternalHelmAppClusterCount
321325

326+
// Collect new telemetry metrics
327+
payload.HelmAppCount = impl.getHelmAppCount()
328+
payload.DevtronAppCount = impl.getDevtronAppCount()
329+
payload.JobCount = impl.getJobCount()
330+
payload.JobPipelineCount = impl.getJobPipelineCount()
331+
payload.JobPipelineTriggeredLast24h = impl.getJobPipelineTriggeredLast24h()
332+
payload.JobPipelineSucceededLast24h = impl.getJobPipelineSucceededLast24h()
333+
payload.UserCreatedPluginCount = impl.getUserCreatedPluginCount()
334+
payload.PolicyCount = impl.getPolicyCount()
335+
payload.AppliedPolicyRowCount = impl.getAppliedPolicyRowCount()
336+
payload.PhysicalClusterCount, payload.IsolatedClusterCount = impl.getClusterCounts()
337+
322338
payload.ClusterProvider, err = impl.GetCloudProvider()
323339
if err != nil {
324340
impl.logger.Errorw("error while getting cluster provider", "error", err)

client/telemetry/bean.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,18 @@ type TelemetryEventEA struct {
7575
HelmChartSuccessfulDeploymentCount int `json:"helmChartSuccessfulDeploymentCount,omitempty"`
7676
ExternalHelmAppClusterCount map[int32]int `json:"ExternalHelmAppClusterCount,omitempty"`
7777
ClusterProvider string `json:"clusterProvider,omitempty"`
78+
// New telemetry fields
79+
HelmAppCount int `json:"helmAppCount,omitempty"`
80+
DevtronAppCount int `json:"devtronAppCount,omitempty"`
81+
JobCount int `json:"jobCount,omitempty"`
82+
JobPipelineCount int `json:"jobPipelineCount,omitempty"`
83+
JobPipelineTriggeredLast24h int `json:"jobPipelineTriggeredLast24h,omitempty"`
84+
JobPipelineSucceededLast24h int `json:"jobPipelineSucceededLast24h,omitempty"`
85+
UserCreatedPluginCount int `json:"userCreatedPluginCount,omitempty"`
86+
PolicyCount map[string]int `json:"policyCount,omitempty"`
87+
AppliedPolicyRowCount map[string]int `json:"appliedPolicyRowCount,omitempty"`
88+
PhysicalClusterCount int `json:"physicalClusterCount,omitempty"`
89+
IsolatedClusterCount int `json:"isolatedClusterCount,omitempty"`
7890
}
7991

8092
const AppsCount int = 50
@@ -136,4 +148,16 @@ type TelemetryEventDto struct {
136148
HelmChartSuccessfulDeploymentCount int `json:"helmChartSuccessfulDeploymentCount,omitempty"`
137149
ExternalHelmAppClusterCount map[int32]int `json:"ExternalHelmAppClusterCount"`
138150
ClusterProvider string `json:"clusterProvider,omitempty"`
151+
// New telemetry fields
152+
HelmAppCount int `json:"helmAppCount,omitempty"`
153+
DevtronAppCount int `json:"devtronAppCount,omitempty"`
154+
JobCount int `json:"jobCount,omitempty"`
155+
JobPipelineCount int `json:"jobPipelineCount,omitempty"`
156+
JobPipelineTriggeredLast24h int `json:"jobPipelineTriggeredLast24h,omitempty"`
157+
JobPipelineSucceededLast24h int `json:"jobPipelineSucceededLast24h,omitempty"`
158+
UserCreatedPluginCount int `json:"userCreatedPluginCount,omitempty"`
159+
PolicyCount map[string]int `json:"policyCount,omitempty"`
160+
AppliedPolicyRowCount map[string]int `json:"appliedPolicyRowCount,omitempty"`
161+
PhysicalClusterCount int `json:"physicalClusterCount,omitempty"`
162+
IsolatedClusterCount int `json:"isolatedClusterCount,omitempty"`
139163
}

0 commit comments

Comments
 (0)