def test_network_stats_delta_calculation(simple_metric): m1 = metrics.Metrics() m1.timestamp = 0 m1.add_network_stats(bytes_in=100, packets_in=50, bytes_out=200, packets_out=150) m2 = metrics.Metrics(last_metric=m1) m2.timestamp = 10 m2.interval = 10 m2.add_network_stats(bytes_in=125, packets_in=75, bytes_out=225, packets_out=175) m3 = metrics.Metrics(last_metric=m2) m3.timestamp = 10 m3.interval = 10 m3.add_network_stats(bytes_in=150, packets_in=100, bytes_out=250, packets_out=200) assert m2.network_stats["bytes_in"] == 25 assert m2.network_stats["packets_in"] == 25 assert m2.network_stats["bytes_out"] == 25 assert m2.network_stats["packets_out"] == 25 assert m3.network_stats["bytes_in"] == 25 assert m3.network_stats["packets_in"] == 25 assert m3.network_stats["bytes_out"] == 25 assert m3.network_stats["packets_out"] == 25
def collect_metrics(self): """Sample system metrics and populate a metrics object suitable for publishing to Device Defender.""" metrics_current = metrics.Metrics(short_names=self._short_names, last_metric=self._last_metric) self.network_stats(metrics_current) self.listening_ports(metrics_current) self.network_connections(metrics_current) self._last_metric = metrics_current return metrics_current
def simple_metric(): m = metrics.Metrics() m.add_network_stats(bytes_in=100, packets_in=50, bytes_out=200, packets_out=150) m.add_network_connection("10.10.10.10", 80, "eth0", 9009) m.add_network_connection("11.11.11.11", 80, "eth0", 88888) m.add_network_connection("2001:0db8:85a3:0000:0000:8a2e:0370:7334", 80, "eth0", 8080) m.add_cpu_usage(50.5) m.add_listening_ports( "UDP", [ { "port": 999, "interface": "eth0" }, { "port": 980, "interface": "wlan0" }, { "port": 9032, "interface": "eth0" }, ], ) m.add_listening_ports( "TCP", [ { "port": 80, "interface": "eth0" }, { "port": 88, "interface": "wlan0" }, { "port": 8000, "interface": "eth0" }, { "port": 8000, "interface": "eth0" }, ], ) return m
def test_network_stats_delta_calculation(simple_metric): m1 = metrics.Metrics("FAKE_CLIENT_ID") m1.timestamp = 0 m1.add_network_stats(bytes_in=100, packets_in=50, bytes_out=200, packets_out=150) m2 = metrics.Metrics("FAKE_CLIENT_ID", last_metric=m1) m2.timestamp = 10 m2.interval = 10 m2.add_network_stats(bytes_in=125, packets_in=75, bytes_out=225, packets_out=175) assert m2.network_stats['bytes_in'] == 25 assert m2.network_stats['packets_in'] == 25 assert m2.network_stats['bytes_out'] == 25 assert m2.network_stats['packets_out'] == 25
def test_field_sizes(): m = metrics.Metrics() m.add_network_stats(100, 50, 200, 150) m.add_network_connection("10.10.10.10", 80, "eth0", 99999) m.listening_tcp_ports += [80, 88, 8000, 43] m.listening_udp_ports += [999, 980, 9032] assert len(m._net_connections) == 1 assert len(m.listening_tcp_ports) == 4 assert len(m.listening_udp_ports) == 3 assert len(m.network_stats) == 0
def simple_metric_short_names(): m = metrics.Metrics(short_names=True) m.add_network_stats(bytes_in=100, packets_in=50, bytes_out=200, packets_out=150) m.add_network_connection("10.10.10.10", 80, "eth0", 9009) m.add_network_connection("11.11.11.11", 80, "eth0", 88888) m.add_cpu_usage(50.5) m.add_listening_ports( "UDP", [ { "port": 999, "interface": "eth0" }, { "port": 980, "interface": "wlan0" }, { "port": 9032, "interface": "eth0" }, ], ) m.add_listening_ports( "TCP", [ { "port": 80, "interface": "eth0" }, { "port": 88, "interface": "wlan0" }, { "port": 8000, "interface": "eth0" }, { "port": 8000, "interface": "eth0" }, ], ) return m
def simple_metric_short_names(): m = metrics.Metrics(short_names=True, client_id="FAKE_CLIENT_ID") m.add_network_stats(bytes_in=100, packets_in=50, bytes_out=200, packets_out=150) m.add_network_connection("10.10.10.10", 80) m.add_network_connection("11.11.11.11", 80) m.listening_tcp_ports += [80, 88, 8000, 43] m.listening_udp_ports += [999, 980, 9032] return m
def test_field_sizes(): m = metrics.Metrics("FAKE_CLIENT_ID") m.add_network_stats(100, 50, 200, 150) m.add_network_connection("10.10.10.10", 80) m.listening_tcp_ports += [80, 88, 8000, 43] m.listening_udp_ports += [999, 980, 9032] assert len(m._net_connections) == 1 assert len(m.listening_tcp_ports) == 4 assert len(m.listening_udp_ports) == 3 assert len(m.network_stats) == 4 assert m.client_id == "FAKE_CLIENT_ID"
def test_sampled_lists(simple_metric): t = metrics.Tags() m = metrics.Metrics(client_id="FAKE_CLIENT_ID") m.max_list_size = 10 for i in range(1, 20): m.add_network_connection("10.10.10.10", i) m.listening_udp_ports.append(i) m.listening_tcp_ports.append(i) report = m._v1_metrics() metric_block = report[t.metrics] assert len(metric_block[t.listening_tcp_ports][t.ports]) == 10 assert len(metric_block[t.listening_udp_ports][t.ports]) == 10 assert len(metric_block[t.tcp_conn][t.connections]) == 10
def test_sampled_lists(simple_metric): t = metrics.Tags() m = metrics.Metrics() m.max_list_size = 10 for i in range(1, 20): m.add_network_connection("10.10.10." + str(i), i, "eth0", 99999) m.listening_udp_ports.append(i) m.listening_tcp_ports.append(i) report = m._v1_metrics() metric_block = report[t.metrics] assert len(metric_block[t.listening_tcp_ports][t.ports]) == 10 assert len(metric_block[t.listening_udp_ports][t.ports]) == 10 assert len(metric_block[t.tcp_conn][t.established_connections][t.connections]) == 10
def simple_metric_short_names(): m = metrics.Metrics(short_names=True) m.add_network_stats(bytes_in=100, packets_in=50, bytes_out=200, packets_out=150) m.add_network_connection("10.10.10.10", 80, "eth0", 9009) m.add_network_connection("11.11.11.11", 80, "eth0", 88888) m.add_listening_ports("UDP", [{'port': 999, 'interface': 'eth0'}, {'port': 980, 'interface': 'wlan0'}, {'port': 9032, 'interface': 'eth0'}]) m.add_listening_ports("TCP", [{'port': 80, 'interface': 'eth0'}, {'port': 88, 'interface': 'wlan0'}, {'port': 8000, 'interface': 'eth0'}, {'port': 8000, 'interface': 'eth0'}]) return m
def test_timestamp(simple_metric): m1 = metrics.Metrics() assert m1._timestamp >= simple_metric._timestamp
def test_timestamp(simple_metric): m1 = metrics.Metrics("FAKE_CLIENT_ID") assert m1._timestamp >= simple_metric._timestamp