Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add more SFP/interface statistics & ability to print #196

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ The default configuration file comes with a sample configuration, making it easy

poe = True # POE metrics
monitor = True # Interface monitor metrics
monitor_sfp_unplugged = False # Interface monitor metrics for unplugged SFP/SFP+ ports
netwatch = True # Netwatch metrics
public_ip = True # Public IP metrics
wireless = True # WLAN general metrics
Expand Down Expand Up @@ -473,4 +474,4 @@ mktxp is running as pid 36704

**Running Tests**
- TDB
- Run via: `$ python setup.py test`
- Run via: `$ python setup.py test`
5 changes: 3 additions & 2 deletions deploy/kubernetes/secret.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
type: Opaque
stringData:
_mktxp.conf: |
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down Expand Up @@ -39,7 +39,7 @@ stringData:

compact_default_conf_values = False # Compact mktxp.conf, so only specific values are kept on the individual routers' level
mktxp.conf: |
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down Expand Up @@ -92,6 +92,7 @@ stringData:

poe = True # POE metrics
monitor = True # Interface monitor metrics
monitor_sfp_unplugged = False # Interface monitor metrics for unplugged SFP/SFP+ ports
netwatch = True # Netwatch metrics
public_ip = True # Public IP metrics
wireless = True # WLAN general metrics
Expand Down
2 changes: 1 addition & 1 deletion mktxp/cli/checks/chk_pv.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/cli/config/_mktxp.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
7 changes: 4 additions & 3 deletions mktxp/cli/config/config.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
# Copyright (c) 2020 Arseniy Kuznetsov
# Copyright (c) 2024 Arseniy Kuznetsov
##
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
Expand Down Expand Up @@ -89,6 +89,7 @@ class MKTXPConfigKeys:
FE_IPV6_NEIGHBOR_KEY = 'ipv6_neighbor'

FE_MONITOR_KEY = 'monitor'
FE_MONITOR_SFP_UNPLUGGED_KEY = 'monitor_sfp_unplugged'
FE_WIRELESS_KEY = 'wireless'
FE_WIRELESS_CLIENTS_KEY = 'wireless_clients'
FE_CAPSMAN_KEY = 'capsman'
Expand Down Expand Up @@ -162,7 +163,7 @@ class MKTXPConfigKeys:

BOOLEAN_KEYS_NO = {ENABLED_KEY, SSL_KEY, NO_SSL_CERTIFICATE, FE_CHECK_FOR_UPDATES, FE_KID_CONTROL_DEVICE, FE_KID_CONTROL_DYNAMIC,
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_BGP_KEY,
FE_IPSEC_KEY, FE_LTE_KEY, FE_SWITCH_PORT_KEY, FE_ROUTING_STATS_KEY, FE_CERTIFICATE_KEY}
FE_IPSEC_KEY, FE_LTE_KEY, FE_MONITOR_SFP_UNPLUGGED_KEY, FE_SWITCH_PORT_KEY, FE_ROUTING_STATS_KEY, FE_CERTIFICATE_KEY}

# Feature keys enabled by default
BOOLEAN_KEYS_YES = {PLAINTEXT_LOGIN_KEY, FE_DHCP_KEY, FE_PACKAGE_KEY, FE_DHCP_LEASE_KEY, FE_IP_CONNECTIONS_KEY, FE_INTERFACE_KEY,
Expand All @@ -189,7 +190,7 @@ class ConfigEntry:
MKTXPConfigKeys.USER_KEY, MKTXPConfigKeys.PASSWD_KEY,
MKTXPConfigKeys.SSL_KEY, MKTXPConfigKeys.NO_SSL_CERTIFICATE, MKTXPConfigKeys.SSL_CERTIFICATE_VERIFY, MKTXPConfigKeys.PLAINTEXT_LOGIN_KEY,
MKTXPConfigKeys.FE_DHCP_KEY, MKTXPConfigKeys.FE_PACKAGE_KEY, MKTXPConfigKeys.FE_DHCP_LEASE_KEY, MKTXPConfigKeys.FE_INTERFACE_KEY,
MKTXPConfigKeys.FE_MONITOR_KEY, MKTXPConfigKeys.FE_WIRELESS_KEY, MKTXPConfigKeys.FE_WIRELESS_CLIENTS_KEY,
MKTXPConfigKeys.FE_MONITOR_KEY, MKTXPConfigKeys.FE_MONITOR_SFP_UNPLUGGED_KEY, MKTXPConfigKeys.FE_WIRELESS_KEY, MKTXPConfigKeys.FE_WIRELESS_CLIENTS_KEY,
MKTXPConfigKeys.FE_IP_CONNECTIONS_KEY, MKTXPConfigKeys.FE_CONNECTION_STATS_KEY, MKTXPConfigKeys.FE_CAPSMAN_KEY, MKTXPConfigKeys.FE_CAPSMAN_CLIENTS_KEY, MKTXPConfigKeys.FE_POE_KEY,
MKTXPConfigKeys.FE_NETWATCH_KEY, MKTXPConfigKeys.MKTXP_USE_COMMENTS_OVER_NAMES, MKTXPConfigKeys.FE_PUBLIC_IP_KEY,
MKTXPConfigKeys.FE_ROUTE_KEY, MKTXPConfigKeys.FE_DHCP_POOL_KEY, MKTXPConfigKeys.FE_FIREWALL_KEY, MKTXPConfigKeys.FE_NEIGHBOR_KEY,
Expand Down
3 changes: 2 additions & 1 deletion mktxp/cli/config/mktxp.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down Expand Up @@ -51,6 +51,7 @@

poe = True # POE metrics
monitor = True # Interface monitor metrics
monitor_sfp_unplugged = False # Interface monitor metrics for unplugged SFP/SFP+ ports
netwatch = True # Netwatch metrics
public_ip = True # Public IP metrics
wireless = True # WLAN general metrics
Expand Down
5 changes: 4 additions & 1 deletion mktxp/cli/dispatch.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!.usr/bin/env python
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down Expand Up @@ -101,6 +101,9 @@ def print(self, args):
elif args['conn_stats']:
OutputProcessor.conn_stats(args['entry_name'])

elif args['interface_stats']:
OutputProcessor.interface_stats(args['entry_name'])

else:
print("Select metric option(s) to print out, or run 'mktxp print -h' to find out more")

Expand Down
6 changes: 5 additions & 1 deletion mktxp/cli/options.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down Expand Up @@ -149,6 +149,10 @@ def parse_commands(self, parser):
help = "IP connections stats",
action = 'store_true')

optional_args_group.add_argument('-if', '--interface_stats', dest='interface_stats',
help = "Interface stats",
action = 'store_true')


# Options checking
def _check_args(self, args, parser):
Expand Down
2 changes: 1 addition & 1 deletion mktxp/cli/output/capsman_out.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/cli/output/conn_stats_out.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/cli/output/dhcp_out.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
42 changes: 42 additions & 0 deletions mktxp/cli/output/interface_stats_out.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# coding=utf8
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
## as published by the Free Software Foundation; either version 2
## of the License, or (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.


from mktxp.flow.processor.output import BaseOutputProcessor
from mktxp.datasource.interface_ds import InterfaceMonitorMetricsDataSource


class InterfaceStatsOutput:
''' Interface Stats Output
'''
@staticmethod
def clients_summary(router_entry):
monitor_labels = ['status', 'rate', 'full_duplex', 'name', 'sfp_temperature', 'sfp_module_present', 'sfp_wavelength', 'sfp_tx_power', 'sfp_rx_power', 'sfp_supply_voltage', 'sfp_tx_bias_current', 'sfp_rx_loss', 'sfp_tx_fault']
monitor_records = InterfaceMonitorMetricsDataSource.metric_records(router_entry, metric_labels = monitor_labels, add_router_id = False, running_only = not router_entry.config_entry.monitor_sfp_unplugged)
if not monitor_records:
print('No monitor stats records')
return

output_records_cnt = 0
output_entry = BaseOutputProcessor.OutputInterfaceStatsEntry
output_table = BaseOutputProcessor.output_table(output_entry)

for record in monitor_records:
output_table.add_row(output_entry(**record))
output_table.add_row(output_entry())
output_records_cnt += 1

print (output_table.draw())

print(f'Total interfaces: {output_records_cnt}')

2 changes: 1 addition & 1 deletion mktxp/cli/output/wifi_out.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/bandwidth_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/base_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/bgp_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/capsman_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/certificate_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/connection_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/dhcp_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/firewall_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/health_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/identity_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/interface_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/ipsec_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/kid_control_device_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/lte_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/mktxp_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
12 changes: 9 additions & 3 deletions mktxp/collector/monitor_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand All @@ -25,17 +25,19 @@ def collect(router_entry):
if not router_entry.config_entry.monitor:
return

monitor_labels = ['status', 'rate', 'full_duplex', 'name', 'sfp_temperature', 'sfp_module_present', 'sfp_wavelength', 'sfp_tx_power', 'sfp_rx_power']
monitor_labels = ['status', 'rate', 'full_duplex', 'name', 'sfp_temperature', 'sfp_module_present', 'sfp_wavelength', 'sfp_tx_power', 'sfp_rx_power', 'sfp_supply_voltage', 'sfp_tx_bias_current', 'sfp_rx_loss', 'sfp_tx_fault']
translation_table = {
'status': lambda value: '1' if value=='link-ok' else '0',
'rate': lambda value: MonitorCollector._rates(value) if value else '0',
'full_duplex': lambda value: '1' if value=='true' else '0',
'name': lambda value: value if value else '',
'sfp_module_present': lambda value: '1' if value=='true' else '0',
'sfp_rx_loss': lambda value: '1' if value=='true' else '0',
'sfp_tx_fault': lambda value: '1' if value=='true' else '0',
'sfp_temperature': lambda value: value if value else '0'
}
monitor_records = InterfaceMonitorMetricsDataSource.metric_records(router_entry, metric_labels = monitor_labels,
translation_table=translation_table, include_comments = True)
translation_table=translation_table, include_comments = True, running_only = not router_entry.config_entry.monitor_sfp_unplugged)
if monitor_records:
monitor_status_metrics = BaseCollector.gauge_collector('interface_status', 'Current interface link status', monitor_records, 'status', ['name'])
yield monitor_status_metrics
Expand All @@ -55,6 +57,10 @@ def collect(router_entry):
yield BaseCollector.gauge_collector('interface_sfp_wavelength', 'Current SFP Wavelength',sfp_metrics, 'sfp_wavelength', ['name'])
yield BaseCollector.gauge_collector('interface_sfp_tx_power', 'Current SFP TX Power', sfp_metrics, 'sfp_tx_power', ['name'])
yield BaseCollector.gauge_collector('interface_sfp_rx_power', 'Current SFP RX Power', sfp_metrics, 'sfp_rx_power', ['name'])
yield BaseCollector.gauge_collector('interface_sfp_supply_voltage', 'Current SFP Supply Voltage', sfp_metrics, 'sfp_supply_voltage', ['name'])
yield BaseCollector.gauge_collector('interface_sfp_tx_bias_current', 'Current SFP TX Bias Current', sfp_metrics, 'sfp_tx_bias_current', ['name'])
yield BaseCollector.gauge_collector('interface_sfp_tx_fault', 'Current SFP Suffering TX fault', sfp_metrics, 'sfp_tx_fault', ['name'])
yield BaseCollector.gauge_collector('interface_sfp_rx_loss', 'Current SFP Suffering RX loss', sfp_metrics, 'sfp_rx_loss', ['name'])


@staticmethod
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/neighbor_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
# Copyright (c) 2020 Arseniy Kuznetsov
# Copyright (c) 2024 Arseniy Kuznetsov
##
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/netwatch_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/package_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/poe_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
2 changes: 1 addition & 1 deletion mktxp/collector/pool_collector.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# coding=utf8
## Copyright (c) 2020 Arseniy Kuznetsov
## Copyright (c) 2024 Arseniy Kuznetsov
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
Expand Down
Loading