Skip to content

Commit 985edb1

Browse files
authored
Merge pull request #259 from ivanpavlina/main
Pull container statistics
2 parents 1136ade + 9c5846b commit 985edb1

8 files changed

Lines changed: 78 additions & 5 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ The default configuration file comes with a sample configuration, making it easy
125125
routing_stats = False # Routing process stats
126126
certificate = False # Certificates metrics
127127
128+
container = False # Containers metrics
129+
128130
remote_dhcp_entry = None # An MKTXP entry to provide for remote DHCP info / resolution
129131
remote_capsman_entry = None # An MKTXP entry to provide for remote capsman info
130132

mktxp/cli/config/config.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class CollectorKeys:
5858
SWITCH_PORT_COLLECTOR = 'SwitchPortCollector'
5959
MKTXP_COLLECTOR = 'MKTXPCollector'
6060
CERTIFICATE_COLLECTOR = 'CertificateCollector'
61+
CONTAINER_COLLECTOR = "ContainerCollector"
6162

6263

6364
class MKTXPConfigKeys:
@@ -125,7 +126,9 @@ class MKTXPConfigKeys:
125126

126127
FE_KID_CONTROL_DEVICE = 'kid_control_assigned'
127128
FE_KID_CONTROL_DYNAMIC = 'kid_control_dynamic'
128-
129+
130+
FE_CONTAINER_KEY = 'container'
131+
129132
FE_CERTIFICATE_KEY = 'certificate'
130133
FE_ROUTING_STATS_KEY = 'routing_stats'
131134

@@ -178,7 +181,7 @@ class MKTXPConfigKeys:
178181

179182
BOOLEAN_KEYS_NO = {ENABLED_KEY, SSL_KEY, NO_SSL_CERTIFICATE, FE_CHECK_FOR_UPDATES, FE_KID_CONTROL_DEVICE, FE_KID_CONTROL_DYNAMIC,
180183
SSL_CERTIFICATE_VERIFY, FE_IPV6_ROUTE_KEY, FE_IPV6_DHCP_POOL_KEY, FE_IPV6_FIREWALL_KEY, FE_IPV6_NEIGHBOR_KEY, FE_CONNECTION_STATS_KEY, FE_BFD_KEY, FE_BGP_KEY,
181-
FE_EOIP_KEY, FE_GRE_KEY, FE_IPIP_KEY, FE_IPSEC_KEY, FE_LTE_KEY, FE_SWITCH_PORT_KEY, FE_ROUTING_STATS_KEY, FE_CERTIFICATE_KEY, FE_DNS_KEY}
184+
FE_EOIP_KEY, FE_GRE_KEY, FE_IPIP_KEY, FE_IPSEC_KEY, FE_LTE_KEY, FE_SWITCH_PORT_KEY, FE_ROUTING_STATS_KEY, FE_CERTIFICATE_KEY, FE_DNS_KEY, FE_CONTAINER_KEY}
182185

183186
# Feature keys enabled by default
184187
BOOLEAN_KEYS_YES = {PLAINTEXT_LOGIN_KEY, FE_DHCP_KEY, FE_HEALTH_KEY, FE_PACKAGE_KEY, FE_DHCP_LEASE_KEY, FE_IP_CONNECTIONS_KEY, FE_INTERFACE_KEY,
@@ -212,7 +215,7 @@ class ConfigEntry:
212215
MKTXPConfigKeys.FE_IPV6_ROUTE_KEY, MKTXPConfigKeys.FE_IPV6_DHCP_POOL_KEY, MKTXPConfigKeys.FE_IPV6_FIREWALL_KEY, MKTXPConfigKeys.FE_IPV6_NEIGHBOR_KEY,
213216
MKTXPConfigKeys.FE_USER_KEY, MKTXPConfigKeys.FE_QUEUE_KEY, MKTXPConfigKeys.FE_REMOTE_DHCP_ENTRY, MKTXPConfigKeys.FE_REMOTE_CAPSMAN_ENTRY, MKTXPConfigKeys.FE_CHECK_FOR_UPDATES, MKTXPConfigKeys.FE_BFD_KEY, MKTXPConfigKeys.FE_BGP_KEY,
214217
MKTXPConfigKeys.FE_KID_CONTROL_DEVICE, MKTXPConfigKeys.FE_KID_CONTROL_DYNAMIC, MKTXPConfigKeys.FE_EOIP_KEY, MKTXPConfigKeys.FE_GRE_KEY, MKTXPConfigKeys.FE_IPIP_KEY, MKTXPConfigKeys.FE_LTE_KEY, MKTXPConfigKeys.FE_IPSEC_KEY, MKTXPConfigKeys.FE_SWITCH_PORT_KEY,
215-
MKTXPConfigKeys.FE_ROUTING_STATS_KEY, MKTXPConfigKeys.FE_CERTIFICATE_KEY
218+
MKTXPConfigKeys.FE_ROUTING_STATS_KEY, MKTXPConfigKeys.FE_CERTIFICATE_KEY, MKTXPConfigKeys.FE_CONTAINER_KEY
216219
])
217220
MKTXPSystemEntry = namedtuple('MKTXPSystemEntry', [MKTXPConfigKeys.PORT_KEY, MKTXPConfigKeys.LISTEN_KEY, MKTXPConfigKeys.MKTXP_SOCKET_TIMEOUT,
218221
MKTXPConfigKeys.MKTXP_INITIAL_DELAY, MKTXPConfigKeys.MKTXP_MAX_DELAY,

mktxp/cli/config/mktxp.conf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@
7979
bgp = False # BGP sessions metrics
8080
routing_stats = False # Routing process stats
8181
certificate = False # Certificates metrics
82+
83+
container = False # Containers metrics
8284

8385
remote_dhcp_entry = None # An MKTXP entry to provide for remote DHCP info / resolution
8486
remote_capsman_entry = None # An MKTXP entry to provide for remote capsman info
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# coding=utf8
2+
# Copyright (c) 2020 Arseniy Kuznetsov
3+
##
4+
# This program is free software; you can redistribute it and/or
5+
# modify it under the terms of the GNU General Public License
6+
# as published by the Free Software Foundation; either version 2
7+
# of the License, or (at your option) any later version.
8+
##
9+
# This program is distributed in the hope that it will be useful,
10+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
# GNU General Public License for more details.
13+
14+
15+
from mktxp.collector.base_collector import BaseCollector
16+
from mktxp.datasource.container_ds import ContainerDataSource
17+
from mktxp.datasource.package_ds import PackageMetricsDataSource
18+
19+
20+
class ContainerCollector(BaseCollector):
21+
'''Neighbor Collector'''
22+
23+
@staticmethod
24+
def collect(router_entry):
25+
if router_entry.config_entry.container and PackageMetricsDataSource.is_package_installed(router_entry, package_name='container'):
26+
metric_labels = ['name', 'repo', 'os', 'arch', 'status']
27+
records = ContainerDataSource.metric_records(router_entry, metric_labels=metric_labels)
28+
metrics = BaseCollector.info_collector('container', 'Containers', records, metric_labels=metric_labels)
29+
yield metrics

mktxp/datasource/container_ds.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# coding=utf8
2+
# Copyright (c) 2020 Arseniy Kuznetsov
3+
#
4+
# This program is free software; you can redistribute it and/or
5+
# modify it under the terms of the GNU General Public License
6+
# as published by the Free Software Foundation; either version 2
7+
# of the License, or (at your option) any later version.
8+
#
9+
# This program is distributed in the hope that it will be useful,
10+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
# GNU General Public License for more details.
13+
14+
15+
from mktxp.datasource.base_ds import BaseDSProcessor
16+
17+
18+
class ContainerDataSource:
19+
@staticmethod
20+
def metric_records(router_entry, metric_labels):
21+
22+
metric_labels = metric_labels or []
23+
router_records = []
24+
25+
try:
26+
router_records = router_entry.api_connection.router_api().get_resource(f'/container').get()
27+
for record in router_records:
28+
if 'comment' in record:
29+
record['name'] = record['comment']
30+
return BaseDSProcessor.trimmed_records(router_entry, router_records=router_records, metric_labels=metric_labels)
31+
except Exception as exc:
32+
print(f'Error getting Neighbors info from router {router_entry.router_name}@{router_entry.config_entry.hostname}: {exc}')
33+
return None

mktxp/flow/collector_handler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def _valid_collect_interval(self):
130130
diff = now - self.last_collect_timestamp
131131
if diff < config_handler.system_entry.minimal_collect_interval:
132132
if config_handler.system_entry.verbose_mode:
133-
print(f'An attemp to collect metrics within minimal metrics collection interval: {diff} < {config_handler.system_entry.minimal_collect_interval}')
133+
print(f'An attempt to collect metrics within minimal metrics collection interval: {diff} < {config_handler.system_entry.minimal_collect_interval}')
134134
print('deferring..')
135135
return False
136136

mktxp/flow/collector_registry.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
from mktxp.collector.switch_collector import SwitchPortCollector
4949
from mktxp.collector.certificate_collector import CertificateCollector
5050
from mktxp.collector.dns_collector import DNSCollector
51+
from mktxp.collector.container_collector import ContainerCollector
5152

5253
class CollectorRegistry:
5354
''' MKTXP Collectors Registry
@@ -95,6 +96,8 @@ def __init__(self):
9596
self.register(CollectorKeys.LTE_COLLECTOR, LTECollector.collect)
9697
self.register(CollectorKeys.SWITCH_PORT_COLLECTOR, SwitchPortCollector.collect)
9798

99+
self.register(CollectorKeys.CONTAINER_COLLECTOR, ContainerCollector.collect)
100+
98101
self.register(CollectorKeys.ROUTING_STATS_COLLECTOR, RoutingStatsCollector.collect)
99102
self.register(CollectorKeys.CERTIFICATE_COLLECTOR, CertificateCollector.collect)
100103

mktxp/flow/router_entry.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ def __init__(self, router_name):
8282
CollectorKeys.LTE_COLLECTOR: 0,
8383
CollectorKeys.SWITCH_PORT_COLLECTOR: 0,
8484
CollectorKeys.MKTXP_COLLECTOR: 0,
85-
CollectorKeys.CERTIFICATE_COLLECTOR: 0
85+
CollectorKeys.CERTIFICATE_COLLECTOR: 0,
86+
CollectorKeys.CONTAINER_COLLECTOR: 0
8687
}
8788
self._dhcp_entry = None
8889
self._dhcp_records = {}

0 commit comments

Comments
 (0)