Skip to content

Commit 5ad1921

Browse files
Merge pull request #603 from pliurh/metric
SDN-4179: Metrics: Add metric for multicast enabled netnamespaces
2 parents f0ba068 + 3d6aa12 commit 5ad1921

File tree

5 files changed

+40
-7
lines changed

5 files changed

+40
-7
lines changed

pkg/network/common/common.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,3 +279,8 @@ func GetNodeInternalIP(node *corev1.Node) string {
279279
}
280280
return nodeIP
281281
}
282+
283+
func NetnsIsMulticastEnabled(netns *osdnv1.NetNamespace) bool {
284+
enabled, ok := netns.Annotations[osdnv1.MulticastEnabledAnnotation]
285+
return enabled == "true" && ok
286+
}

pkg/network/master/metrics/record.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,8 @@ func RecordEgressFirewallRuleCount(count float64) {
1818
func RecordEgressIPCount(count float64) {
1919
metricEgressIPCount.Set(count)
2020
}
21+
22+
// RecordMulticastEnabledNamespaceCount records the number of namespaces with multicast enabled.
23+
func RecordMulticastEnabledNamespaceCount(count float64) {
24+
metricMulticastEnabledNamespaceCount.Set(count)
25+
}

pkg/network/master/metrics/register.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,19 @@ var metricEgressFirewallCount = prometheus.NewGauge(prometheus.GaugeOpts{
3232
Help: "The number of egress firewall policies",
3333
})
3434

35+
// represents the count of multicast enabled namespaces
36+
var metricMulticastEnabledNamespaceCount = prometheus.NewGauge(prometheus.GaugeOpts{
37+
Namespace: metricSDNNamespace,
38+
Subsystem: metricSDNSubsystemController,
39+
Name: "num_multicast_enabled_namespaces",
40+
Help: "The number of multicast enabled namespaces",
41+
})
42+
3543
var registry = prometheus.NewRegistry()
3644

3745
func Register() {
3846
registry.MustRegister(metricEgressIPCount)
3947
registry.MustRegister(metricEgressFirewallRuleCount)
4048
registry.MustRegister(metricEgressFirewallCount)
49+
registry.MustRegister(metricMulticastEnabledNamespaceCount)
4150
}

pkg/network/master/vnids.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ import (
1616
osdnclient "github.com/openshift/client-go/network/clientset/versioned"
1717
osdnapihelpers "github.com/openshift/library-go/pkg/network/networkapihelpers"
1818
"github.com/openshift/sdn/pkg/network/common"
19+
metrics "github.com/openshift/sdn/pkg/network/master/metrics"
1920
pnetid "github.com/openshift/sdn/pkg/network/master/netid"
2021
)
2122

2223
type masterVNIDMap struct {
2324
// Synchronizes assign, revoke and update VNID
2425
lock sync.Mutex
2526
ids map[string]uint32
27+
mcEnabled map[string]bool
2628
netIDManager *pnetid.Allocator
2729

2830
allowRenumbering bool
@@ -37,6 +39,7 @@ func newMasterVNIDMap(allowRenumbering bool) *masterVNIDMap {
3739
return &masterVNIDMap{
3840
netIDManager: pnetid.NewInMemory(netIDRange),
3941
ids: make(map[string]uint32),
42+
mcEnabled: make(map[string]bool),
4043
allowRenumbering: allowRenumbering,
4144
}
4245
}
@@ -215,6 +218,7 @@ func (vmap *masterVNIDMap) assignVNID(osdnClient osdnclient.Interface, nsName st
215218
func (vmap *masterVNIDMap) revokeVNID(osdnClient osdnclient.Interface, nsName string) error {
216219
vmap.lock.Lock()
217220
defer vmap.lock.Unlock()
221+
delete(vmap.mcEnabled, nsName)
218222

219223
// Delete NetNamespace object
220224
if err := osdnClient.NetworkV1().NetNamespaces().Delete(context.TODO(), nsName, metav1.DeleteOptions{}); err != nil {
@@ -236,6 +240,8 @@ func (vmap *masterVNIDMap) updateVNID(osdnClient osdnclient.Interface, origNetns
236240
// Informer cache should not be mutated, so get a copy of the object
237241
netns := origNetns.DeepCopy()
238242

243+
vmap.mcEnabled[netns.Name] = common.NetnsIsMulticastEnabled(netns)
244+
239245
action, args, err := osdnapihelpers.GetChangePodNetworkAnnotation(netns)
240246
if err == osdnapihelpers.ErrorPodNetworkAnnotationNotFound {
241247
// Nothing to update
@@ -311,6 +317,7 @@ func (master *OsdnMaster) handleDeleteNamespace(obj interface{}) {
311317
if err := master.vnids.revokeVNID(master.osdnClient, ns.Name); err != nil {
312318
klog.Errorf("Error revoking netid: %v", err)
313319
}
320+
master.recordMetrics()
314321
}
315322

316323
func (master *OsdnMaster) watchNetNamespaces() {
@@ -325,4 +332,16 @@ func (master *OsdnMaster) handleAddOrUpdateNetNamespace(obj, _ interface{}, even
325332
if err := master.vnids.updateVNID(master.osdnClient, netns); err != nil {
326333
klog.Errorf("Error updating netid: %v", err)
327334
}
335+
master.recordMetrics()
336+
}
337+
338+
// recordMetrics records prometheus metrics
339+
func (master *OsdnMaster) recordMetrics() {
340+
mcEnabledNamespaceCount := 0.0
341+
for _, enabled := range master.vnids.mcEnabled {
342+
if enabled {
343+
mcEnabledNamespaceCount += 1
344+
}
345+
}
346+
metrics.RecordMulticastEnabledNamespaceCount(float64(mcEnabledNamespaceCount))
328347
}

pkg/network/node/vnids.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,19 +178,14 @@ func (vmap *nodeVNIDMap) unsetVNID(name string) (id uint32, err error) {
178178
return id, nil
179179
}
180180

181-
func netnsIsMulticastEnabled(netns *osdnv1.NetNamespace) bool {
182-
enabled, ok := netns.Annotations[osdnv1.MulticastEnabledAnnotation]
183-
return enabled == "true" && ok
184-
}
185-
186181
func (vmap *nodeVNIDMap) populateVNIDs() error {
187182
nets, err := common.ListAllNetNamespaces(context.TODO(), vmap.osdnClient)
188183
if err != nil {
189184
return err
190185
}
191186

192187
for _, net := range nets {
193-
vmap.setVNID(net.Name, net.NetID, netnsIsMulticastEnabled(net))
188+
vmap.setVNID(net.Name, net.NetID, common.NetnsIsMulticastEnabled(net))
194189
}
195190
return nil
196191
}
@@ -227,7 +222,7 @@ func (vmap *nodeVNIDMap) handleAddOrUpdateNetNamespace(obj, _ interface{}, event
227222
// Skip this event if nothing has changed
228223
oldNetID, err := vmap.getVNID(netns.NetName)
229224
oldMCEnabled := vmap.mcEnabled[netns.NetName]
230-
mcEnabled := netnsIsMulticastEnabled(netns)
225+
mcEnabled := common.NetnsIsMulticastEnabled(netns)
231226
if err == nil && oldNetID == netns.NetID && oldMCEnabled == mcEnabled {
232227
return
233228
}

0 commit comments

Comments
 (0)