From 0a424640b59e1aae71c06287ca718db97ec9e99e Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Thu, 3 Jun 2021 09:43:15 +0200
Subject: [PATCH] moved gws-direct to config

---
 inventory_provider/config.py        | 300 ++++++++++++++----------
 inventory_provider/routes/poller.py | 346 +---------------------------
 test/conftest.py                    |   6 +-
 test/data/gws-direct.json           | 164 +++++++++++++
 4 files changed, 350 insertions(+), 466 deletions(-)
 create mode 100644 test/data/gws-direct.json

diff --git a/inventory_provider/config.py b/inventory_provider/config.py
index 2ddd10ee..4b0a42bd 100644
--- a/inventory_provider/config.py
+++ b/inventory_provider/config.py
@@ -2,144 +2,202 @@ import json
 import jsonschema
 
 CONFIG_SCHEMA = {
-    "$schema": "http://json-schema.org/draft-07/schema#",
+    '$schema': 'http://json-schema.org/draft-07/schema#',
 
-    "definitions": {
-        "timeout": {
-            "type": "number",
-            "maximum": 60,  # sanity
-            "exclusiveMinimum": 0
-        },
-        "database-credentials": {
-            "type": "object",
-            "properties": {
-                "hostname": {"type": "string"},
-                "dbname": {"type": "string"},
-                "username": {"type": "string"},
-                "password": {"type": "string"}
+    'definitions': {
+        'timeout': {
+            'type': 'number',
+            'maximum': 60,  # sanity
+            'exclusiveMinimum': 0
+        },
+        'database-credentials': {
+            'type': 'object',
+            'properties': {
+                'hostname': {'type': 'string'},
+                'dbname': {'type': 'string'},
+                'username': {'type': 'string'},
+                'password': {'type': 'string'}
             },
-            "required": ["hostname", "dbname", "username", "password"],
-            "additionalProperties": False
-        },
-        "ssh-credentials": {
-            "type": "object",
-            "properties": {
-                "username": {"type": "string"},
-                "private-key": {"type": "string"},
-                "known-hosts": {"type": "string"}
+            'required': ['hostname', 'dbname', 'username', 'password'],
+            'additionalProperties': False
+        },
+        'ssh-credentials': {
+            'type': 'object',
+            'properties': {
+                'username': {'type': 'string'},
+                'private-key': {'type': 'string'},
+                'known-hosts': {'type': 'string'}
             },
-            "required": ["private-key", "known-hosts"],
-            "additionalProperties": False
-        },
-        "ims": {
-            "type": "object",
-            "properties": {
-                "api": {"type": "string"},
-                "username": {"type": "string"},
-                "password": {"type": "string"}
+            'required': ['private-key', 'known-hosts'],
+            'additionalProperties': False
+        },
+        'ims': {
+            'type': 'object',
+            'properties': {
+                'api': {'type': 'string'},
+                'username': {'type': 'string'},
+                'password': {'type': 'string'}
             },
-            "required": ["api", "username", "password"],
-            "additionalProperties": False
-        },
-        "otrs-export": {
-            "type": "object",
-            "properties": {
-                "username": {"type": "string"},
-                "private-key": {"type": "string"},
-                "known-hosts": {"type": "string"},
-                "destination": {"type": "string"}
+            'required': ['api', 'username', 'password'],
+            'additionalProperties': False
+        },
+        'otrs-export': {
+            'type': 'object',
+            'properties': {
+                'username': {'type': 'string'},
+                'private-key': {'type': 'string'},
+                'known-hosts': {'type': 'string'},
+                'destination': {'type': 'string'}
             },
-            "required": [
-                "username",
-                "private-key",
-                "known-hosts",
-                "destination"
+            'required': [
+                'username',
+                'private-key',
+                'known-hosts',
+                'destination'
             ],
-            "additionalProperties": False
-        },
-        "redis-credentials": {
-            "type": "object",
-            "properties": {
-                "hostname": {"type": "string"},
-                "port": {"type": "integer"},
-                "celery-db-index": {"type": "integer"},
-                "socket_timeout": {"$ref": "#/definitions/timeout"}
+            'additionalProperties': False
+        },
+        'redis-credentials': {
+            'type': 'object',
+            'properties': {
+                'hostname': {'type': 'string'},
+                'port': {'type': 'integer'},
+                'celery-db-index': {'type': 'integer'},
+                'socket_timeout': {'$ref': '#/definitions/timeout'}
             },
-            "required": ["hostname", "port"],
-            "additionalProperties": False
-        },
-        "redis-sentinel-config": {
-            "type": "object",
-            "properties": {
-                "hostname": {"type": "string"},
-                "port": {"type": "integer"},
-                "celery-db-index": {"type": "integer"},
-                "name": {"type": "string"},
-                "redis_socket_timeout": {"$ref": "#/definitions/timeout"},
-                "sentinel_socket_timeout": {"$ref": "#/definitions/timeout"}
+            'required': ['hostname', 'port'],
+            'additionalProperties': False
+        },
+        'redis-sentinel-config': {
+            'type': 'object',
+            'properties': {
+                'hostname': {'type': 'string'},
+                'port': {'type': 'integer'},
+                'celery-db-index': {'type': 'integer'},
+                'name': {'type': 'string'},
+                'redis_socket_timeout': {'$ref': '#/definitions/timeout'},
+                'sentinel_socket_timeout': {'$ref': '#/definitions/timeout'}
             },
-            "required": ["hostname", "port", "name"],
-            "additionalProperties": False
-        },
-        "interface-address": {
-            "type": "object",
-            "properties": {
-                "address": {"type": "string"},
-                "network": {"type": "string"},
-                "interface": {"type": "string"},
-                "router": {"type": "string"}
+            'required': ['hostname', 'port', 'name'],
+            'additionalProperties': False
+        },
+        'interface-address': {
+            'type': 'object',
+            'properties': {
+                'address': {'type': 'string'},
+                'network': {'type': 'string'},
+                'interface': {'type': 'string'},
+                'router': {'type': 'string'}
             },
-            "required": ["address", "network", "interface", "router"],
-            "additionalProperties": False
-        }
+            'required': ['address', 'network', 'interface', 'router'],
+            'additionalProperties': False
+        },
+        'gws-direct-snmp-counter': {
+            'type': 'object',
+            'properties': {
+                'hostname': {'type': 'string'},
+                'community': {'type': 'string'},
+                'oid': {
+                    'type': 'string',
+                    'pattern': r'^(\d+\.)*\d+$'
+                }
+            },
+            'required': ['hostname', 'community', 'oid'],
+            'additionalProperties': False
+        },
+        'gws-direct-snmp-counter-list': {
+            'type': 'array',
+            'items': {'$ref': '#/definitions/gws-direct-snmp-counter'},
+            'minItems': 1
+        },
+        'gws-direct-counters': {
+            'type': 'object',
+            'properties': {
+                'traffic_in': {
+                    '$ref': '#/definitions/gws-direct-snmp-counter-list'},
+                'traffic_out': {
+                    '$ref': '#/definitions/gws-direct-snmp-counter-list'},
+                'discards_in': {
+                    '$ref': '#/definitions/gws-direct-snmp-counter-list'},
+                'discards_out': {
+                    '$ref': '#/definitions/gws-direct-snmp-counter-list'},
+                'errors_in': {
+                    '$ref': '#/definitions/gws-direct-snmp-counter-list'},
+                'errors_out': {
+                    '$ref': '#/definitions/gws-direct-snmp-counter-list'}
+            },
+            'required': ['traffic_in', 'traffic_out'],
+            'additionalProperties': False
+        },
+        'gws-direct-nren-isp-counters': {
+            'type': 'object',
+            'properties': {
+                'nren': {'type': 'string'},
+                'isp': {
+                    'type': 'string',
+                    'enum': ['Cogent', 'Telia', 'Century Link']
+                },
+                'counters': {'$ref': '#/definitions/gws-direct-counters'},
+            },
+            'required': ['nren', 'isp', 'counters'],
+            'additionalProperties': False
+        },
+        'gws-direct': {
+            'type': 'array',
+            'items': {'$ref': '#/definitions/gws-direct-nren-isp-counters'}
+        },
     },
 
-    "type": "object",
-    "properties": {
-        "ops-db": {"$ref": "#/definitions/database-credentials"},
-        "ssh": {"$ref": "#/definitions/ssh-credentials"},
-        "redis": {"$ref": "#/definitions/redis-credentials"},
-        "sentinel": {"$ref": "#/definitions/redis-sentinel-config"},
-        "ims": {"$ref": "#/definitions/ims"},
-        "otrs-export": {"$ref": "#/definitions/otrs-export"},
-        "redis-databases": {
-            "type": "array",
-            "minItems": 1,
-            "items": {"type": "integer"}
-        },
-        "managed-routers": {"type": "string"},
-        "lab-routers": {
-            "type": "array",
-            "items": {"type": "string"}
-        },
-        "unmanaged-interfaces": {
-            "type": "array",
-            "items": {"$ref": "#/definitions/interface-address"}
-        }
+    'type': 'object',
+    'properties': {
+        'ops-db': {'$ref': '#/definitions/database-credentials'},
+        'ssh': {'$ref': '#/definitions/ssh-credentials'},
+        'redis': {'$ref': '#/definitions/redis-credentials'},
+        'sentinel': {'$ref': '#/definitions/redis-sentinel-config'},
+        'ims': {'$ref': '#/definitions/ims'},
+        'otrs-export': {'$ref': '#/definitions/otrs-export'},
+        'redis-databases': {
+            'type': 'array',
+            'minItems': 1,
+            'items': {'type': 'integer'}
+        },
+        'managed-routers': {'type': 'string'},
+        'lab-routers': {
+            'type': 'array',
+            'items': {'type': 'string'}
+        },
+        'unmanaged-interfaces': {
+            'type': 'array',
+            'items': {'$ref': '#/definitions/interface-address'}
+        },
+        'gws-direct': {'$ref': '#/definitions/gws-direct'}
+
     },
-    "oneOf": [
+    'oneOf': [
         {
-            "required": [
-                "ops-db",
-                "ssh",
-                "redis",
-                "redis-databases",
-                "otrs-export",
-                "ims",
-                "managed-routers"]
+            'required': [
+                'ops-db',
+                'ssh',
+                'redis',
+                'redis-databases',
+                'otrs-export',
+                'ims',
+                'managed-routers',
+                'gws-direct']
         },
         {
-            "required": [
-                "ops-db",
-                "ssh",
-                "sentinel",
-                "redis-databases",
-                "otrs-export",
-                "ims",
-                "managed-routers"]
+            'required': [
+                'ops-db',
+                'ssh',
+                'sentinel',
+                'redis-databases',
+                'otrs-export',
+                'ims',
+                'managed-routers',
+                'gws-direct']
         }
     ],
-    "additionalProperties": False
+    'additionalProperties': False
 }
 
 
diff --git a/inventory_provider/routes/poller.py b/inventory_provider/routes/poller.py
index 97c4fb3b..8aacdf41 100644
--- a/inventory_provider/routes/poller.py
+++ b/inventory_provider/routes/poller.py
@@ -626,349 +626,7 @@ def gws_direct():
     This method returns essentially hard-coded data,
     based on the information in POL1-422.
 
-    TODO: this hard-coded data should be in the config file
-
     :return:
     """
-    data = [
-      {
-        "nren": "ARNES",
-        "isp": "Cogent",
-        "counters": {
-          "discards_in": [
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.2.2.1.13.533"
-            }
-          ],
-          "discards_out": [
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.2.2.1.19.533"
-            }
-          ],
-          "errors_in": [
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.2.2.1.14.533"
-            }
-          ],
-          "errors_out": [
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.2.2.1.20.533"
-            }
-          ],
-          "traffic_in": [
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.531"
-            },
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.525"
-            },
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.553"
-            },
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.563"
-            }
-          ],
-          "traffic_out": [
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.531"
-            },
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.525"
-            },
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.553"
-            },
-            {
-              "hostname": "88.200.0.63",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.563"
-            }
-          ]
-        }
-      },
-      {
-        "nren": "ARNES",
-        "isp": "Telia",
-        "counters": {
-          "traffic_in": [
-            {
-              "hostname": "62.40.124.6",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.611"
-            },
-            {
-              "hostname": "62.40.124.6",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.589"
-            }
-          ],
-          "traffic_out": [
-            {
-              "hostname": "62.40.124.6",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.611"
-            },
-            {
-              "hostname": "62.40.124.6",
-              "community": "gn2nocT3st",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.589"
-            }
-          ]
-        }
-      },
-      {
-        "nren": "CARNET",
-        "isp": "Cogent",
-        "counters": {
-          "traffic_in": [
-            {
-              "hostname": "62.40.124.10",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.35"
-            }
-          ],
-          "traffic_out": [
-            {
-              "hostname": "62.40.124.10",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.35"
-            }
-          ]
-        }
-      },
-      {
-        "nren": "CARNET",
-        "isp": "Telia",
-        "counters": {
-          "traffic_in": [
-            {
-              "hostname": "62.40.125.150",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.48"
-            }
-          ],
-          "traffic_out": [
-            {
-              "hostname": "62.40.125.150",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.48"
-            }
-          ]
-        }
-      },
-      {
-        "nren": "KIFU",
-        "isp": "Cogent",
-        "counters": {
-          "traffic_in": [
-            {
-              "hostname": "195.111.97.108",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.155"
-            }
-          ],
-          "traffic_out": [
-            {
-              "hostname": "195.111.97.108",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.155"
-            }
-          ]
-        }
-      },
-      {
-        "nren": "KIFU",
-        "isp": "Telia",
-        "counters": {
-          "traffic_in": [
-            {
-              "hostname": "195.111.97.108",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.148"
-            }
-          ],
-          "traffic_out": [
-            {
-              "hostname": "195.111.97.108",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.148"
-            }
-          ]
-        }
-      },
-      {
-        "nren": "RedIRIS",
-        "isp": "Telia",
-        "counters": {
-          "traffic_in": [
-            {
-              "hostname": "130.206.206.250",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.1487"
-            },
-            {
-              "hostname": "130.206.206.250",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.1488"
-            },
-            {
-              "hostname": "130.206.206.250",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.1489"
-            },
-            {
-              "hostname": "130.206.206.250",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.760"
-            },
-            {
-              "hostname": "130.206.206.250",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.796"
-            }
-          ],
-          "traffic_out": [
-            {
-              "hostname": "130.206.206.250",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.1487"
-            },
-            {
-              "hostname": "130.206.206.250",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.1488"
-            },
-            {
-              "hostname": "130.206.206.250",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.1489"
-            },
-            {
-              "hostname": "130.206.206.250",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.760"
-            },
-            {
-              "hostname": "130.206.206.250",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.796"
-            }
-          ]
-        }
-      },
-      {
-        "nren": "RoEduNet",
-        "isp": "Cogent",
-        "counters": {
-          "traffic_in": [
-            {
-              "hostname": "149.6.50.10",
-              "community": "dante",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.531"
-            }
-          ],
-          "traffic_out": [
-            {
-              "hostname": "149.6.50.10",
-              "community": "dante",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.531"
-            }
-          ]
-        }
-      },
-      {
-        "nren": "RoEduNet",
-        "isp": "Century Link",
-        "counters": {
-          "traffic_in": [
-            {
-              "hostname": "212.162.45.194",
-              "community": "dante",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.9"
-            }
-          ],
-          "traffic_out": [
-            {
-              "hostname": "212.162.45.194",
-              "community": "dante",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.9"
-            }
-          ]
-        }
-      },
-      {
-        "nren": "EENet",
-        "isp": "Telia",
-        "counters": {
-          "traffic_in": [
-            {
-              "hostname": "193.40.133.2",
-              "community": "geant-mon-telia",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.263"
-            }
-          ],
-          "traffic_out": [
-            {
-              "hostname": "193.40.133.2",
-              "community": "geant-mon-telia",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.263"
-            }
-          ]
-        }
-      },
-      {
-        "nren": "PSNC",
-        "isp": "Century Link",
-        "counters": {
-          "traffic_in": [
-            {
-              "hostname": "212.191.126.6",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.675"
-            },
-            {
-              "hostname": "212.191.126.7",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.6.677"
-            }
-          ],
-          "traffic_out": [
-            {
-              "hostname": "212.191.126.6",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.675"
-            },
-            {
-              "hostname": "212.191.126.7",
-              "community": "atlas1453",
-              "oid": "1.3.6.1.2.1.31.1.1.1.10.677"
-            }
-          ]
-        }
-      }
-    ]
-
-    return jsonify(data)
+    config_params = current_app.config['INVENTORY_PROVIDER_CONFIG']
+    return jsonify(config_params['gws-direct'])
diff --git a/test/conftest.py b/test/conftest.py
index 7a30988b..d6066602 100644
--- a/test/conftest.py
+++ b/test/conftest.py
@@ -67,9 +67,13 @@ def data_config_filename():
                     "interface": "ZZZ/9/a/x:0.123",
                     "router": "another.bogus.host.name"
                 }
-            ]
+            ],
+            'gws-direct': {}
         }
 
+        with open(os.path.join(TEST_DATA_DIRNAME, 'gws-direct.json')) as gws:
+            config['gws-direct'] = json.loads(gws.read())
+
         f.write(json.dumps(config).encode('utf-8'))
         f.flush()
         yield f.name
diff --git a/test/data/gws-direct.json b/test/data/gws-direct.json
new file mode 100644
index 00000000..87d4449b
--- /dev/null
+++ b/test/data/gws-direct.json
@@ -0,0 +1,164 @@
+[
+  {
+    "nren": "ARNES",
+    "isp": "Cogent",
+    "counters": {
+      "discards_in": [
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.2.2.1.13.533"}
+      ],
+      "discards_out": [
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.2.2.1.19.533"}
+      ],
+      "errors_in": [
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.2.2.1.14.533"}
+      ],
+      "errors_out": [
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.2.2.1.20.533"}
+      ],
+      "traffic_in": [
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.6.531"},
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.6.525"},
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.6.553"},
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.6.563"}
+      ],
+      "traffic_out": [
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.10.531"},
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.10.525"},
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.10.553"},
+        {"hostname": "88.200.0.63", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.10.563"}
+      ]
+    }
+  },
+  {
+    "nren": "ARNES",
+    "isp": "Telia",
+    "counters": {
+      "traffic_in": [
+        {"hostname": "62.40.124.6", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.6.611"},
+        {"hostname": "62.40.124.6", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.6.589"}
+      ],
+      "traffic_out": [
+        {"hostname": "62.40.124.6", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.10.611"},
+        {"hostname": "62.40.124.6", "community": "gn2nocT3st", "oid": "1.3.6.1.2.1.31.1.1.1.10.589"}
+      ]
+    }
+  },
+  {
+    "nren": "CARNET",
+    "isp": "Cogent",
+    "counters": {
+      "traffic_in": [
+        {"hostname": "62.40.124.10", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.6.35"}
+      ],
+      "traffic_out": [
+        {"hostname": "62.40.124.10", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.10.35"}
+      ]
+    }
+  },
+  {
+    "nren": "CARNET",
+    "isp": "Telia",
+    "counters": {
+      "traffic_in": [
+        {"hostname": "62.40.125.150", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.6.48"}
+      ],
+      "traffic_out": [
+        {"hostname": "62.40.125.150", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.10.48"}
+      ]
+    }
+  },
+  {
+    "nren": "KIFU",
+    "isp": "Cogent",
+    "counters": {
+      "traffic_in": [
+        {"hostname": "195.111.97.108", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.6.155"}
+      ],
+      "traffic_out": [
+        {"hostname": "195.111.97.108", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.10.155"}
+      ]
+    }
+  },
+  {
+    "nren": "KIFU",
+    "isp": "Telia",
+    "counters": {
+      "traffic_in": [
+        {"hostname": "195.111.97.108", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.6.148"}
+      ],
+      "traffic_out": [
+        {"hostname": "195.111.97.108", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.10.148"}
+      ]
+    }
+  },
+  {
+    "nren": "RedIRIS",
+    "isp": "Telia",
+    "counters": {
+      "traffic_in": [
+        {"hostname": "130.206.206.250", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.6.1487"},
+        {"hostname": "130.206.206.250", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.6.1488"},
+        {"hostname": "130.206.206.250", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.6.1489"},
+        {"hostname": "130.206.206.250", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.6.760"},
+        {"hostname": "130.206.206.250", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.6.796"}
+      ],
+      "traffic_out": [
+        {"hostname": "130.206.206.250", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.10.1487"},
+        {"hostname": "130.206.206.250", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.10.1488"},
+        {"hostname": "130.206.206.250", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.10.1489"},
+        {"hostname": "130.206.206.250", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.10.760"},
+        {"hostname": "130.206.206.250", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.10.796"}
+      ]
+    }
+  },
+  {
+    "nren": "RoEduNet",
+    "isp": "Cogent",
+    "counters": {
+      "traffic_in": [
+        {"hostname": "149.6.50.10", "community": "dante", "oid": "1.3.6.1.2.1.31.1.1.1.6.531"}
+      ],
+      "traffic_out": [
+        {"hostname": "149.6.50.10", "community": "dante", "oid": "1.3.6.1.2.1.31.1.1.1.10.531"}
+      ]
+    }
+  },
+  {
+    "nren": "RoEduNet",
+    "isp": "Century Link",
+    "counters": {
+      "traffic_in": [
+        {"hostname": "212.162.45.194", "community": "dante", "oid": "1.3.6.1.2.1.31.1.1.1.6.9"}
+      ],
+      "traffic_out": [
+        {"hostname": "212.162.45.194", "community": "dante", "oid": "1.3.6.1.2.1.31.1.1.1.10.9"}
+      ]
+    }
+  },
+  {
+    "nren": "EENet",
+    "isp": "Telia",
+    "counters": {
+      "traffic_in": [
+        {"hostname": "193.40.133.2", "community": "geant-mon-telia", "oid": "1.3.6.1.2.1.31.1.1.1.6.263"}
+      ],
+      "traffic_out": [
+        {"hostname": "193.40.133.2", "community": "geant-mon-telia", "oid": "1.3.6.1.2.1.31.1.1.1.10.263"}
+      ]
+    }
+  },
+  {
+    "nren": "PSNC",
+    "isp": "Century Link",
+    "counters": {
+      "traffic_in": [
+        {"hostname": "212.191.126.6", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.6.675"},
+        {"hostname": "212.191.126.7", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.6.677"}
+      ],
+      "traffic_out": [
+        {"hostname": "212.191.126.6", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.10.675"},
+        {"hostname": "212.191.126.7", "community": "atlas1453", "oid": "1.3.6.1.2.1.31.1.1.1.10.677"}
+      ]
+    }
+  }
+]
\ No newline at end of file
-- 
GitLab