88"sync"
99"time"
1010
11+ "github.com/Azure/azure-container-networking/aitelemetry"
1112"github.com/Azure/azure-container-networking/log"
1213"github.com/Azure/azure-container-networking/npm/iptm"
1314"github.com/Azure/azure-container-networking/npm/util"
@@ -23,6 +24,8 @@ import (
2324"k8s.io/client-go/tools/cache"
2425)
2526
27+ var aiMetadata string
28+
2629const (
2730restoreRetryWaitTimeInSeconds = 5
2831restoreMaxRetries = 10
@@ -47,7 +50,7 @@ type NetworkPolicyManager struct {
4750isSafeToCleanUpAzureNpmChain bool
4851
4952clusterState telemetry.ClusterState
50- reportManager * telemetry. ReportManager
53+ version string
5154
5255serverVersion * version.Info
5356TelemetryEnabled bool
@@ -77,6 +80,61 @@ func (npMgr *NetworkPolicyManager) GetClusterState() telemetry.ClusterState {
7780return npMgr .clusterState
7881}
7982
83+ // SendAiMetrics :- send NPM metrics using AppInsights
84+ func (npMgr * NetworkPolicyManager ) SendAiMetrics () {
85+ var (
86+ aiConfig = aitelemetry.AIConfig {
87+ AppName : util .AzureNpmFlag ,
88+ AppVersion : npMgr .version ,
89+ BatchSize : 32768 ,
90+ BatchInterval : 30 ,
91+ RefreshTimeout : 15 ,
92+ DebugMode : true ,
93+ GetEnvRetryCount : 5 ,
94+ GetEnvRetryWaitTimeInSecs : 3 ,
95+ }
96+
97+ th , err = aitelemetry .NewAITelemetry ("" , aiMetadata , aiConfig )
98+ heartbeat = time .NewTicker (time .Minute * heartbeatIntervalInMinutes ).C
99+ customDimensions = map [string ]string {"ClusterID" : util .GetClusterID (npMgr .nodeName ),
100+ "APIServer" : npMgr .serverVersion .String ()}
101+ podCount = aitelemetry.Metric {
102+ Name : "PodCount" ,
103+ CustomDimensions : customDimensions ,
104+ }
105+ nsCount = aitelemetry.Metric {
106+ Name : "NsCount" ,
107+ CustomDimensions : customDimensions ,
108+ }
109+ nwPolicyCount = aitelemetry.Metric {
110+ Name : "NwPolicyCount" ,
111+ CustomDimensions : customDimensions ,
112+ }
113+ )
114+
115+ for ; err != nil ; {
116+ log .Logf ("Failed to init AppInsights with err: %+v" , err )
117+ time .Sleep (time .Minute * 5 )
118+ th , err = aitelemetry .NewAITelemetry ("" , aiMetadata , aiConfig )
119+ }
120+
121+ log .Logf ("Initialized AppInsights handle" )
122+
123+ defer th .Close (10 )
124+
125+ for {
126+ <- heartbeat
127+ clusterState := npMgr .GetClusterState ()
128+ podCount .Value = float64 (clusterState .PodCount )
129+ nsCount .Value = float64 (clusterState .NsCount )
130+ nwPolicyCount .Value = float64 (clusterState .NwPolicyCount )
131+
132+ th .TrackMetric (podCount )
133+ th .TrackMetric (nsCount )
134+ th .TrackMetric (nwPolicyCount )
135+ }
136+ }
137+
80138// restore restores iptables from backup file
81139func (npMgr * NetworkPolicyManager ) restore () {
82140iptMgr := iptm .NewIptablesManager ()
@@ -177,18 +235,11 @@ func NewNetworkPolicyManager(clientset *kubernetes.Clientset, informerFactory in
177235NsCount : 0 ,
178236NwPolicyCount : 0 ,
179237},
180- reportManager : & telemetry.ReportManager {
181- ContentType : telemetry .ContentType ,
182- Report : & telemetry.NPMReport {},
183- },
238+ version : npmVersion ,
184239serverVersion : serverVersion ,
185240TelemetryEnabled : true ,
186241}
187242
188- clusterID := util .GetClusterID (npMgr .nodeName )
189- clusterState := npMgr .GetClusterState ()
190- npMgr .reportManager .Report .(* telemetry.NPMReport ).GetReport (clusterID , npMgr .nodeName , npmVersion , serverVersion .GitVersion , clusterState )
191-
192243allNs , _ := newNs (util .KubeAllNamespacesFlag )
193244npMgr .nsMap [util .KubeAllNamespacesFlag ] = allNs
194245
0 commit comments