@@ -3,14 +3,14 @@ package telemetry
33import (
44 "encoding/json"
55 "fmt"
6- client "github.com/devtron-labs/devtron/client/events"
76 "github.com/devtron-labs/devtron/internal/sql/repository"
87 "github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig"
98 util2 "github.com/devtron-labs/devtron/internal/util"
109 "github.com/devtron-labs/devtron/pkg/cluster"
1110 "github.com/devtron-labs/devtron/pkg/user"
1211 "github.com/devtron-labs/devtron/util"
1312 "github.com/go-pg/pg"
13+ "github.com/patrickmn/go-cache"
1414 "github.com/posthog/posthog-go"
1515 "go.uber.org/zap"
1616 "google.golang.org/grpc/codes"
@@ -29,7 +29,6 @@ type TelemetryEventClientImpl struct {
2929 clusterService cluster.ClusterService
3030 K8sUtil * util2.K8sUtil
3131 aCDAuthConfig * user.ACDAuthConfig
32- config * client.EventClientConfig
3332 environmentService cluster.EnvironmentService
3433 userService user.UserService
3534 appListingRepository repository.AppListingRepository
@@ -40,10 +39,11 @@ type TelemetryEventClientImpl struct {
4039}
4140
4241type TelemetryEventClient interface {
42+ GetClientPlatformIdAndTelemetryUrl () (* PosthogData , error )
4343}
4444
4545func NewTelemetryEventClientImpl (logger * zap.SugaredLogger , client * http.Client , clusterService cluster.ClusterService ,
46- K8sUtil * util2.K8sUtil , aCDAuthConfig * user.ACDAuthConfig , config * client. EventClientConfig ,
46+ K8sUtil * util2.K8sUtil , aCDAuthConfig * user.ACDAuthConfig ,
4747 environmentService cluster.EnvironmentService , userService user.UserService ,
4848 appListingRepository repository.AppListingRepository , PosthogClient * PosthogClient ,
4949 ciPipelineRepository pipelineConfig.CiPipelineRepository , pipelineRepository pipelineConfig.PipelineRepository ,
@@ -55,12 +55,13 @@ func NewTelemetryEventClientImpl(logger *zap.SugaredLogger, client *http.Client,
5555 cron : cron ,
5656 logger : logger ,
5757 client : client , clusterService : clusterService ,
58- K8sUtil : K8sUtil , aCDAuthConfig : aCDAuthConfig , config : config ,
58+ K8sUtil : K8sUtil , aCDAuthConfig : aCDAuthConfig ,
5959 environmentService : environmentService , userService : userService ,
6060 appListingRepository : appListingRepository , PosthogClient : PosthogClient ,
6161 ciPipelineRepository : ciPipelineRepository , pipelineRepository : pipelineRepository ,
6262 posthogConfig : posthogConfig ,
6363 }
64+
6465 watcher .HeartbeatEventForTelemetry ()
6566 _ , err := cron .AddFunc (fmt .Sprintf ("@every %dm" , watcher .posthogConfig .SummaryInterval ), watcher .SummaryEventForTelemetry )
6667 if err != nil {
@@ -122,30 +123,11 @@ func (d TelemetryEventType) String() string {
122123}
123124
124125func (impl * TelemetryEventClientImpl ) SummaryEventForTelemetry () {
125- client , err := impl .K8sUtil . GetClientForInCluster ()
126+ ucid , err := impl .getUCID ()
126127 if err != nil {
127128 impl .logger .Errorw ("exception caught inside telemetry summary event" , "err" , err )
128129 return
129130 }
130- cm , err := impl .K8sUtil .GetConfigMap (impl .aCDAuthConfig .ACDConfigMapNamespace , DevtronUniqueClientIdConfigMap , client )
131- if errStatus , ok := status .FromError (err ); ! ok || errStatus .Code () == codes .NotFound || errStatus .Code () == codes .Unknown {
132- // if not found, create new cm
133- cm = & v1.ConfigMap {ObjectMeta : v12.ObjectMeta {Name : DevtronUniqueClientIdConfigMap }}
134- data := map [string ]string {}
135- data [DevtronUniqueClientIdConfigMapKey ] = util .Generate (16 ) // generate unique random number
136- cm .Data = data
137- _ , err = impl .K8sUtil .CreateConfigMap (impl .aCDAuthConfig .ACDConfigMapNamespace , cm , client )
138- if err != nil {
139- return
140- }
141- }
142- if cm == nil {
143- impl .logger .Errorw ("cm found nil inside telemetry summary event" , "cm" , cm )
144- return
145- }
146- dataMap := cm .Data
147- ucid := dataMap [DevtronUniqueClientIdConfigMapKey ]
148-
149131 discoveryClient , err := impl .K8sUtil .GetK8sDiscoveryClientInCluster ()
150132 if err != nil {
151133 impl .logger .Errorw ("exception caught inside telemetry summary event" , "err" , err )
@@ -229,31 +211,11 @@ func (impl *TelemetryEventClientImpl) SummaryEventForTelemetry() {
229211}
230212
231213func (impl * TelemetryEventClientImpl ) HeartbeatEventForTelemetry () {
232- client , err := impl .K8sUtil . GetClientForInCluster ()
214+ ucid , err := impl .getUCID ()
233215 if err != nil {
234216 impl .logger .Errorw ("exception caught inside telemetry heartbeat event" , "err" , err )
235217 return
236218 }
237- cm , err := impl .K8sUtil .GetConfigMap (impl .aCDAuthConfig .ACDConfigMapNamespace , DevtronUniqueClientIdConfigMap , client )
238- if errStatus , ok := status .FromError (err ); ! ok || errStatus .Code () == codes .NotFound || errStatus .Code () == codes .Unknown {
239- // if not found, create new cm
240- cm = & v1.ConfigMap {ObjectMeta : v12.ObjectMeta {Name : DevtronUniqueClientIdConfigMap }}
241- data := map [string ]string {}
242- data [DevtronUniqueClientIdConfigMapKey ] = util .Generate (16 ) // generate unique random number
243- cm .Data = data
244- _ , err = impl .K8sUtil .CreateConfigMap (impl .aCDAuthConfig .ACDConfigMapNamespace , cm , client )
245- if err != nil {
246- impl .logger .Errorw ("exception caught inside telemetry heartbeat event" , "err" , err )
247- return
248- }
249- }
250- if cm == nil {
251- impl .logger .Errorw ("configmap found nil for telemetry heartbeat event" , "cm" , cm )
252- return
253- }
254- dataMap := cm .Data
255- ucid := dataMap [DevtronUniqueClientIdConfigMapKey ]
256-
257219 discoveryClient , err := impl .K8sUtil .GetK8sDiscoveryClientInCluster ()
258220 if err != nil {
259221 impl .logger .Errorw ("exception caught inside telemetry heartbeat event" , "err" , err )
@@ -283,3 +245,56 @@ func (impl *TelemetryEventClientImpl) HeartbeatEventForTelemetry() {
283245 Properties : prop ,
284246 })
285247}
248+
249+ func (impl * TelemetryEventClientImpl ) GetClientPlatformIdAndTelemetryUrl () (* PosthogData , error ) {
250+ ucid , err := impl .getUCID ()
251+ if err != nil {
252+ impl .logger .Errorw ("exception while getting unique client id" , "error" , err )
253+ return nil , err
254+ }
255+ data := & PosthogData {
256+ Url : impl .posthogConfig .PosthogEndpoint ,
257+ UCID : ucid ,
258+ }
259+ return data , err
260+ }
261+
262+ type PosthogData struct {
263+ Url string `json:"url,omitempty"`
264+ UCID string `json:"ucid,omitempty"`
265+ }
266+
267+ func (impl * TelemetryEventClientImpl ) getUCID () (string , error ) {
268+ ucid , found := impl .PosthogClient .cache .Get (DevtronUniqueClientIdConfigMapKey )
269+ if found {
270+ return ucid .(string ), nil
271+ } else {
272+ client , err := impl .K8sUtil .GetClientForInCluster ()
273+ if err != nil {
274+ impl .logger .Errorw ("exception while getting unique client id" , "error" , err )
275+ return "" , err
276+ }
277+
278+ cm , err := impl .K8sUtil .GetConfigMap (impl .aCDAuthConfig .ACDConfigMapNamespace , DevtronUniqueClientIdConfigMap , client )
279+ if errStatus , ok := status .FromError (err ); ! ok || errStatus .Code () == codes .NotFound || errStatus .Code () == codes .Unknown {
280+ // if not found, create new cm
281+ cm = & v1.ConfigMap {ObjectMeta : v12.ObjectMeta {Name : DevtronUniqueClientIdConfigMap }}
282+ data := map [string ]string {}
283+ data [DevtronUniqueClientIdConfigMapKey ] = util .Generate (16 ) // generate unique random number
284+ cm .Data = data
285+ _ , err = impl .K8sUtil .CreateConfigMap (impl .aCDAuthConfig .ACDConfigMapNamespace , cm , client )
286+ if err != nil {
287+ impl .logger .Errorw ("exception while getting unique client id" , "error" , err )
288+ return "" , err
289+ }
290+ }
291+ dataMap := cm .Data
292+ ucid = dataMap [DevtronUniqueClientIdConfigMapKey ]
293+ impl .PosthogClient .cache .Set (DevtronUniqueClientIdConfigMapKey , ucid , cache .DefaultExpiration )
294+ if cm == nil {
295+ impl .logger .Errorw ("configmap not found while getting unique client id" , "cm" , cm )
296+ return ucid .(string ), err
297+ }
298+ }
299+ return ucid .(string ), nil
300+ }
0 commit comments