diff --git a/.gitignore b/.gitignore index 644d918..b316375 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ -*secret* +**secret** .venv .env -db.sqlite3 -sqlite3.db migrations/ +.db +.sqlite3 diff --git a/commands.txt b/commands.txt index c1e8cbe..cfb1e0c 100644 --- a/commands.txt +++ b/commands.txt @@ -1,2 +1,18 @@ -# Start ssh-agent -> add ssh-key -> ssh into iou2 with localtunnel -eval `ssh-agent`; ssh-add /c/Users/twide/.ssh/uninett_rsa; ssh -L 8899:127.0.0.1:8899 -J emilte@login.uninett.no emilte@iou2.uninett.no -A +# + +# Start ssh-agent -> add ssh-key -> ssh into iou2 with localtunnel (jupyter lab) +eval `ssh-agent`; ssh-add ~/.ssh/uninett_rsa; ssh -L 8899:127.0.0.1:8899 -J emilte@login.uninett.no emilte@iou2.uninett.no -A + +# Start ssh-agent -> add ssh-key -> ssh into iou2 with localtunnel (jupyter notebook) +eval `ssh-agent`; ssh-add ~/.ssh/uninett_rsa; ssh -L 9988:127.0.0.1:9988 -J emilte@login.uninett.no emilte@iou2.uninett.no -A + +# ncdu (disk usage) +# -x: do not cross filesystem bounderies +# -r: read only / prevent delete options +ncdu -xr + +# du +# -h: human readable M, G +# -s: summarize +# -d, --max-depth=N +du -hs -d 0 \ No newline at end of file diff --git a/db_attempt/microdep/management/commands/feeder.py b/db_attempt/microdep/management/commands/feeder.py deleted file mode 100644 index 8af7183..0000000 --- a/db_attempt/microdep/management/commands/feeder.py +++ /dev/null @@ -1,55 +0,0 @@ -# imports -import gzip - -from django.utils import timezone -from django.core import management -from django.core.management.base import BaseCommand -from django.db import transaction - -from microdep import models as microdep_models -# End: imports ----------------------------------------------------------------- - -# Settings: - - - -class Command(BaseCommand): - - @transaction.atomic - def handle(self, *args, **options): - print(f"\n== COMMAND: {__file__} ==") - - crude = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/crude-00_00_01.gz' - traceroute = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/traceroute_128.39.19.150.gz' - tcptraceroute = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/tcptraceroute_128.39.19.150.gz' - vmstat = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/vmstat.gz' - - with gzip.open(filename=crude, mode='rt') as file: - - for i, line in enumerate(file): - key_values = line.split() # list of key-value pairs # ['ID=1', 'RX=15434', ...] - - # print(line) - # if i > 50: - # break - if i % 100000 == 0: - print(f"{i}: {line}") - - try: - record = microdep_models.CrudeRecord.objects.create( - stream_id = key_values[0].split('=')[1], # ID=1 - seq = key_values[1].split('=')[1], - src = key_values[2].split('=')[1].split(':')[0], # SRC=ip:port - dst = key_values[3].split('=')[1].split(':')[0], # DST=ip:port - tx = key_values[4].split('=')[1], - rx = key_values[5].split('=')[1], - size = key_values[6].split('=')[1], - hoplimit = key_values[7].split('=')[1], - ) - - except Exception as e: - print(e) - print(i) - print(line) - - # End of handle diff --git a/db_attempt/microdep/management/commands/old.py b/db_attempt/microdep/management/commands/old.py deleted file mode 100644 index eddc788..0000000 --- a/db_attempt/microdep/management/commands/old.py +++ /dev/null @@ -1,64 +0,0 @@ -# imports -import gzip - -from django.utils import timezone -from django.core import management -from django.core.management.base import BaseCommand - -from microdep import models as microdep_models -# End: imports ----------------------------------------------------------------- - -# Settings: - - -class Command(BaseCommand): - - def handle(self, *args, **options): - print(f"\n== COMMAND: {__file__} ==") - - - crude = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/crude-00_00_01.gz' - traceroute = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/traceroute_128.39.19.150.gz' - tcptraceroute = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/tcptraceroute_128.39.19.150.gz' - vmstat = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/vmstat.gz' - - headerlines = 4 # how many lines in the file is header - # ca = types.CrudeAnalyzer(window_size=1000) - - with gzip.open(filename=crude, mode='rt') as file: - [file.readline() for i in range(headerlines)] # discard headerlines - - i = 0 - for line in file: - i += 1 - key_values = line.split() # list of key-value pairs # ['ID=1', 'RX=15434', ...] - # if i > 8624984: - # print(line) - - # print(line) - if i > 50: - break - - try: - record = microdep_models.CrudeRecord.objects.create( - stream_id = key_values[0].split('=')[1], # ID=1 - seq = key_values[1].split('=')[1], - src = key_values[2].split('=')[1].split(':')[0], # SRC=ip:port - dst = key_values[3].split('=')[1].split(':')[0], # DST=ip:port - tx = key_values[4].split('=')[1], - rx = key_values[5].split('=')[1], - size = key_values[6].split('=')[1], - hoplimit = key_values[7].split('=')[1], - ) - # ca.add_record(record) - # print(record.__dict__) - - except Exception as e: - print(e) - print(i) - print(line) - - # print(ca) - # print(ca.get_all_attr_names()) - # print(ca.__dict__) - # End of handle diff --git a/db_attempt/microdep/utils.py b/db_attempt/microdep/utils.py deleted file mode 100644 index 64f5590..0000000 --- a/db_attempt/microdep/utils.py +++ /dev/null @@ -1,102 +0,0 @@ -import inspect -from typing import Any -from microdep import models as microdep_models - -class BaseInterface: - - def __init__(self, *args, **kwargs): - """Enables kwargs""" - pass - - def get_all_annotations(self) -> dict[str, object]: - """Find all annotated attrs from inherited classes (including self)""" - annotations: dict[str, object] = {} - for cls in inspect.getmro(self.__class__): # for each parent class - try: - annotations.update(cls.__annotations__) # not all objects has __annotations__ - # annotations.update({attr:None for attr in cls.__annotations__}) # not all objects has __annotations__ - except: - pass - return annotations - - def get_all_attr_names(self) -> list[str]: - return list(self.get_all_annotations().keys()) - - - -class AnnotatedI(BaseInterface): - """ - This interface will only allow to set attrs that has been annotated. Also support required fields. - To solve The Diamond Problem on multiple inheritance, redefine 'required_fields' on the child class. - - extended classes must define - def __init__(self, *args, **kwargs): - self._required_fields.extend(__class__.required_fields) # must be called before super().__init__() - super().__init__(*args, **kwargs) - """ - - _required_fields: list[str] = [] - required_fields: list[str] = [] - - def __init__(self, *args, **kwargs): - self._required_fields.extend(AnnotatedI.required_fields) # must be called before super().__init__() - super().__init__(**kwargs) - self._set_allowed_attrs(**kwargs) - self._check_required_fields(**kwargs) - - def _set_allowed_attrs(self, **kwargs): - attr_names = self.get_all_attr_names() - for attr, value in kwargs.items(): - if attr in attr_names: - setattr(self, attr, value) - else: - print(f"[warning][{self.__class__.__name__}]: Attr '{attr}' not allowed") - - def _check_required_fields(self, **kwargs): - """Checks if required fields exists after '_set_allowed_attrs'""" - - for field in self._required_fields: - if not hasattr(self, field): - raise NotImplementedError(f"[{self.__class__.__name__}] requires attr '{field}'") - - - -class CrudeAnalyzer2(AnnotatedI): - """Analyzes crude records per stream-id""" - - window_size: int - records: dict[str, list[microdep_models.CrudeRecord]] = {} # Queue for each stream-id in CrudeRecord - stats: dict[str, dict[str, Any]] = {} - _stats_init: dict[str, Any] = { - 'counter': 0, - 'counter': 0, - } - - required_fields: list[str] = ['window_size'] - - def __init__(self, *args, **kwargs): - self._required_fields.extend(CrudeAnalyzer2.required_fields) # must be called before super().__init__() - super().__init__(*args, **kwargs) - - def __str__(self) -> str: - return f"{self.__class__.__name__}, window_size={self.window_size}\n{self.__str_queues__()}" - - def __str_queues__(self) -> str: - """Returns str representation of existing records""" - return "\n".join( [f"queue #{id}: {len(q)} records" for id, q in self.records.items()] ) - - def add_record(self, record: microdep_models.CrudeRecord) -> None: - """Add record and move window when full""" - i = record.stream_id - if not i in self.records: - self.records[i] = [] - elif len(self.records[i]) == self.window_size: - self.records[i].pop(0) # pop record - self.records[i].append(record) # finally add record - self._after_add_record_hook(id=i) - - def _after_add_record_hook(self, id: str) -> None: - if not id in self.stats: - # init dict if stats for this stream-id doesn't exist - self.stats[id] = self._stats_init - self.stats[id]['counter'] += 1 diff --git a/db_attempt/main/__init__.py b/django_wrapper/apps/microdep/__init__.py similarity index 100% rename from db_attempt/main/__init__.py rename to django_wrapper/apps/microdep/__init__.py diff --git a/db_attempt/microdep/apps.py b/django_wrapper/apps/microdep/apps.py similarity index 100% rename from db_attempt/microdep/apps.py rename to django_wrapper/apps/microdep/apps.py diff --git a/db_attempt/microdep/__init__.py b/django_wrapper/apps/microdep/management/commands/__init__.py similarity index 100% rename from db_attempt/microdep/__init__.py rename to django_wrapper/apps/microdep/management/commands/__init__.py diff --git a/db_attempt/microdep/management/commands/ana.py b/django_wrapper/apps/microdep/management/commands/ana.py similarity index 100% rename from db_attempt/microdep/management/commands/ana.py rename to django_wrapper/apps/microdep/management/commands/ana.py diff --git a/django_wrapper/apps/microdep/management/commands/conn.py b/django_wrapper/apps/microdep/management/commands/conn.py new file mode 100644 index 0000000..b5068ad --- /dev/null +++ b/django_wrapper/apps/microdep/management/commands/conn.py @@ -0,0 +1,57 @@ +# imports +import gzip +import glob +import os +import pathlib + +from django.db import connections +from django.utils import timezone +from django.core import management +from django.core.management.base import BaseCommand +from django.conf import settings + + + +from apps.microdep import models as microdep_models +# End: imports ----------------------------------------------------------------- + +# Settings: + + +class Command(BaseCommand): + + def handle(self, *args, **options): + print(f"\n== COMMAND: {__file__} ==") + # https://stackoverflow.com/questions/29840382/single-django-app-to-use-multiple-sqlite3-files-for-database + # https://stackoverflow.com/questions/56733112/how-to-create-new-database-connection-in-django + # https://stackoverflow.com/questions/14254315/django-dynamic-database-file + # print(connections.databases) + + """ + Create a database for each host in /dynga/data/ + Analyze crude streams and create Gap in db + """ + + crude_pattern = '**/*crude*.gz' + + data_root = pathlib.Path(os.environ['DATA_ROOT']).resolve() + + # finds all crude files + for path in data_root.rglob(crude_pattern): # /**/////*crude*.gz + path_tokens = path.as_posix().split('/') + domain = path_tokens[-4] + host = path_tokens[-3] + db_key = f"{domain}_{host}" + + # get or create db + # if not connections.databases.get(db_key, None): + # print(db_key) + # connections.databases[db_key] = dict(connections.databases['default']) + # connections.databases[db_key]['NAME'] = path.parent.parent / f"{db_key}.db" + # print(connections.databases[db_key]) + + + # analyze file + # add gaps to db in data_root/domain/host + + diff --git a/django_wrapper/apps/microdep/management/commands/crude_parser.py b/django_wrapper/apps/microdep/management/commands/crude_parser.py new file mode 100644 index 0000000..85abc08 --- /dev/null +++ b/django_wrapper/apps/microdep/management/commands/crude_parser.py @@ -0,0 +1,73 @@ +# imports +import gzip + +from django.utils import timezone +from django.core import management +from django.core.management.base import BaseCommand + +from microdep import models as microdep_models +from microdep import utils as microdep_utils +# End: imports ----------------------------------------------------------------- + +# Settings: + + +class Command(BaseCommand): + + def add_arguments(self, parser): + # Positional arguments + parser.add_argument('path', nargs='+', type=int) + + # Named (optional) arguments + parser.add_argument( + '--delete', + action='store_true', + help='Delete poll instead of closing it', + ) + + def handle(self, *args, **options): + print(f"\n== COMMAND: {__file__} ==") + + + # crude = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/crude-00_00_01.gz' + # traceroute = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/traceroute_128.39.19.150.gz' + # tcptraceroute = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/tcptraceroute_128.39.19.150.gz' + # vmstat = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/vmstat.gz' + tekno_crude = 'C:/Users/twide/my_projects/git/ml-microdep/secret/teknobyen-mp.uninett.no/2021-02-07/crude-00_00_02.gz' + # traceroute2 = 'C:/Users/twide/my_projects/git/ml-microdep/secret/teknobyen-mp.uninett.no/2021-02-07/traceroute_128.39.19.150.gz' + # tcptraceroute2 = 'C:/Users/twide/my_projects/git/ml-microdep/secret/teknobyen-mp.uninett.no/2021-02-07/tcptraceroute_128.39.19.150.gz' + # vmstat2 = 'C:/Users/twide/my_projects/git/ml-microdep/secret/teknobyen-mp.uninett.no/2021-02-07/vmstat.gz' + + + ca = microdep_utils.CrudeAnalyzer(window_size=1000) + + with gzip.open(filename=tekno_crude, mode='rt') as file: + + for i, line in enumerate(file): + key_values = line.split() # list of key-value pairs # ['ID=1', 'RX=15434', ...] + + if i % 1000000 == 0: + print(f"{i}: {line}") + + try: + record = microdep_models.CrudeRecord.objects.create( + stream_id = key_values[0].split('=')[1], # ID=1 + seq = key_values[1].split('=')[1], + src = key_values[2].split('=')[1].split(':')[0], # SRC=ip:port + dst = key_values[3].split('=')[1].split(':')[0], # DST=ip:port + tx = key_values[4].split('=')[1], + rx = key_values[5].split('=')[1], + size = key_values[6].split('=')[1], + hoplimit = key_values[7].split('=')[1], + ) + ca.add_record(record) + # print(record.__dict__) + + except Exception as e: + print(e) + print(i) + print(line) + + print(ca) + # print(ca.__dict__) + # End of handle diff --git a/db_attempt/microdep/management/commands/crude_parser.py b/django_wrapper/apps/microdep/management/commands/gather_gaps.py similarity index 90% rename from db_attempt/microdep/management/commands/crude_parser.py rename to django_wrapper/apps/microdep/management/commands/gather_gaps.py index c6c585d..8bddf8d 100644 --- a/db_attempt/microdep/management/commands/crude_parser.py +++ b/django_wrapper/apps/microdep/management/commands/gather_gaps.py @@ -13,11 +13,18 @@ class Command(BaseCommand): + + def add_arguments(self, parser): + # Positional arguments + + # Named (optional) arguments + parser.add_argument('--root_path', type=str, help='Root directory to search for filepattern') + parser.add_argument('--pattern', type=str, help='Glob pattern') def handle(self, *args, **options): print(f"\n== COMMAND: {__file__} ==") - + # crude = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/crude-00_00_01.gz' # traceroute = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/traceroute_128.39.19.150.gz' # tcptraceroute = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/tcptraceroute_128.39.19.150.gz' diff --git a/db_attempt/microdep/models.py b/django_wrapper/apps/microdep/models.py similarity index 100% rename from db_attempt/microdep/models.py rename to django_wrapper/apps/microdep/models.py diff --git a/db_attempt/microdep/management/commands/__init__.py b/django_wrapper/main/__init__.py similarity index 100% rename from db_attempt/microdep/management/commands/__init__.py rename to django_wrapper/main/__init__.py diff --git a/db_attempt/main/asgi.py b/django_wrapper/main/asgi.py similarity index 100% rename from db_attempt/main/asgi.py rename to django_wrapper/main/asgi.py diff --git a/db_attempt/main/settings.py b/django_wrapper/main/settings.py similarity index 94% rename from db_attempt/main/settings.py rename to django_wrapper/main/settings.py index ac39ead..2d3ae90 100644 --- a/db_attempt/main/settings.py +++ b/django_wrapper/main/settings.py @@ -19,13 +19,13 @@ # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/ -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'atlt95g&1$eihl+)@^oicv3^z5)qhgdvpy)5bfuqp3y4je^(w)' +SECRET_KEY = "NOT SET" + # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = [] +ALLOWED_HOSTS = ['*'] # Application definition @@ -37,7 +37,7 @@ # 'django.contrib.sessions', # 'django.contrib.messages', # 'django.contrib.staticfiles', - 'microdep', + 'apps.microdep', ] MIDDLEWARE = [ diff --git a/db_attempt/main/wsgi.py b/django_wrapper/main/wsgi.py similarity index 100% rename from db_attempt/main/wsgi.py rename to django_wrapper/main/wsgi.py diff --git a/db_attempt/manage.py b/django_wrapper/manage.py similarity index 100% rename from db_attempt/manage.py rename to django_wrapper/manage.py diff --git a/db_attempt/microdep/migrations/__init__.py b/django_wrapper/scripts/__init__.py similarity index 100% rename from db_attempt/microdep/migrations/__init__.py rename to django_wrapper/scripts/__init__.py diff --git a/scripts/constants.py b/django_wrapper/scripts/constants.py similarity index 100% rename from scripts/constants.py rename to django_wrapper/scripts/constants.py diff --git a/scripts/crude_custom.txt b/django_wrapper/scripts/crude_custom.txt similarity index 100% rename from scripts/crude_custom.txt rename to django_wrapper/scripts/crude_custom.txt diff --git a/scripts/crude_parser.py b/django_wrapper/scripts/crude_parser.py similarity index 98% rename from scripts/crude_parser.py rename to django_wrapper/scripts/crude_parser.py index bedc4e4..00d580c 100644 --- a/scripts/crude_parser.py +++ b/django_wrapper/scripts/crude_parser.py @@ -14,6 +14,8 @@ with gzip.open(filename=crude_ngu, mode='rt') as file: # with open(file=crude_custom, mode='r') as file: # [file.readline() for i in range(4)] # discard headerlines + + records = np.array() for i, line in enumerate(file, 1): line = line.strip() diff --git a/scripts/data_fetching.py b/django_wrapper/scripts/data_fetching.py similarity index 100% rename from scripts/data_fetching.py rename to django_wrapper/scripts/data_fetching.py diff --git a/scripts/emil_types.py b/django_wrapper/scripts/emil_types.py similarity index 99% rename from scripts/emil_types.py rename to django_wrapper/scripts/emil_types.py index f005ff0..f659b32 100644 --- a/scripts/emil_types.py +++ b/django_wrapper/scripts/emil_types.py @@ -80,8 +80,6 @@ def gap_size(self): return None return self.tail[0].seq - self.head[-1].seq - - def to_json(self, **kwargs): obj = { 'from_adr': self.from_adr, diff --git a/django_wrapper/scripts/gap_ml.ipynb b/django_wrapper/scripts/gap_ml.ipynb new file mode 100644 index 0000000..70fe170 --- /dev/null +++ b/django_wrapper/scripts/gap_ml.ipynb @@ -0,0 +1,1110 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "personalized-catholic", + "metadata": {}, + "source": [ + "### Import modules" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "pleasant-pregnancy", + "metadata": {}, + "outputs": [], + "source": [ + "import pathlib\n", + "import ujson as json\n", + "import sklearn\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "id": "fewer-blanket", + "metadata": {}, + "source": [ + "### Init variabels" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "id": "nominated-upper", + "metadata": {}, + "outputs": [], + "source": [ + "ROOT_DIR = \"/dynga/uninett/data/\"\n", + "FILE_PATTERN = \"**/*events*.log\"\n", + "GAP_LIST_LENGTH = 10000\n" + ] + }, + { + "cell_type": "markdown", + "id": "double-chemical", + "metadata": {}, + "source": [ + "### Read gaps from event-files" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "id": "aerial-maria", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "25: /dynga/uninett/data/ytelse-osl.uninett.no/2021-02-15/uninett-events-00:00:07.log\n", + "50: /dynga/uninett/data/ytelse-osl.uninett.no/2021-01-22/uninett-events-00:00:07.log\n", + "75: /dynga/uninett/data/ytelse-osl.uninett.no/2020-12-29/uninett-events-00:00:07.log\n", + "100: /dynga/uninett/data/ytelse-osl.uninett.no/2020-12-05/uninett-events-00:00:07.log\n", + "125: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-10/uninett-events-00:00:07.log\n", + "150: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-07:22:07.log\n", + "175: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-06:57:07.log\n", + "200: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-06:32:07.log\n", + "225: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-06:07:08.log\n", + "250: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-05:42:07.log\n", + "275: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-05:17:07.log\n", + "300: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-04:52:07.log\n", + "325: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-04:27:07.log\n", + "350: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-04:02:07.log\n", + "375: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-03:37:07.log\n", + "400: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-03:12:07.log\n", + "425: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-02:47:07.log\n", + "450: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-02:22:07.log\n", + "475: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-01:57:07.log\n", + "500: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-01:32:07.log\n", + "525: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-01:07:08.log\n", + "550: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-00:42:07.log\n", + "575: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-00:17:07.log\n", + "600: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-09:37:07.log\n", + "625: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-09:12:07.log\n", + "650: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-08:47:07.log\n", + "675: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-08:22:07.log\n", + "700: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-07:57:07.log\n", + "725: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-07:32:07.log\n", + "750: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-07:07:07.log\n", + "775: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-06:42:07.log\n", + "800: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-06:17:07.log\n", + "825: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-05:52:07.log\n", + "850: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-05:27:07.log\n", + "875: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-05:02:07.log\n", + "900: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-04:37:07.log\n", + "925: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-04:12:07.log\n", + "950: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-03:47:07.log\n", + "975: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-03:22:07.log\n", + "1000: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-02:57:07.log\n", + "1025: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-02:32:07.log\n", + "1050: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-02:07:07.log\n", + "1075: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-01:42:07.log\n", + "1100: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-01:17:07.log\n", + "1125: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-00:52:07.log\n", + "1150: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-00:27:07.log\n", + "1175: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-00:02:07.log\n", + "1200: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-02/uninett-events-13:56:07.log\n", + "1225: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-02/uninett-events-13:31:07.log\n", + "1250: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-02/uninett-events-13:06:07.log\n", + "1275: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-02/uninett-events-12:41:07.log\n", + "1300: /dynga/uninett/data/khio-mp.c.uninett.no/2021-02-12/uninett-events-00:00:07.log\n", + "1325: /dynga/uninett/data/khio-mp.c.uninett.no/2021-01-19/uninett-events-00:00:07.log\n", + "1350: /dynga/uninett/data/khio-mp.c.uninett.no/2020-12-25/uninett-events-00:00:07.log\n", + "1375: /dynga/uninett/data/khio-mp.c.uninett.no/2020-12-01/uninett-events-00:00:07.log\n", + "1400: /dynga/uninett/data/khio-mp.c.uninett.no/2020-11-06/uninett-events-00:00:07.log\n", + "1425: /dynga/uninett/data/khio-mp.c.uninett.no/2020-10-13/uninett-events-00:00:07.log\n", + "1450: /dynga/uninett/data/khio-mp.c.uninett.no/2020-09-16/uninett-events-00:00:07.log\n", + "1475: /dynga/uninett/data/blaasal-mp.uninett.no/2021-02-16/uninett-events-00:00:07.log\n", + "1500: /dynga/uninett/data/blaasal-mp.uninett.no/2021-01-22/uninett-events-00:00:07.log\n", + "1525: /dynga/uninett/data/blaasal-mp.uninett.no/2020-12-29/uninett-events-00:00:07.log\n", + "1550: /dynga/uninett/data/blaasal-mp.uninett.no/2020-12-05/uninett-events-00:00:07.log\n", + "1575: /dynga/uninett/data/blaasal-mp.uninett.no/2020-11-10/uninett-events-00:00:07.log\n", + "1600: /dynga/uninett/data/blaasal-mp.uninett.no/2020-10-17/uninett-events-00:00:07.log\n", + "1625: /dynga/uninett/data/blaasal-mp.uninett.no/2020-09-22/uninett-events-00:00:07.log\n", + "1650: /dynga/uninett/data/blaasal-mp.uninett.no/2020-06-25/uninett-events-00:00:17.log\n", + "1675: /dynga/uninett/data/blaasal-mp.uninett.no/2020-06-17/uninett-events-00:00:17.log\n", + "1700: /dynga/uninett/data/blaasal-mp.uninett.no/2020-06-23/uninett-events-00:00:17.log\n", + "1725: /dynga/uninett/data/blaasal-mp.uninett.no/2020-07-09/uninett-events-00:00:17.log\n", + "1750: /dynga/uninett/data/sias-mp.c.uninett.no/2021-02-17/uninett-events-00:00:07.log\n", + "1775: /dynga/uninett/data/sias-mp.c.uninett.no/2021-01-23/uninett-events-00:00:07.log\n", + "1800: /dynga/uninett/data/sias-mp.c.uninett.no/2020-12-30/uninett-events-00:00:07.log\n", + "1825: /dynga/uninett/data/sias-mp.c.uninett.no/2020-12-06/uninett-events-00:00:07.log\n", + "1850: /dynga/uninett/data/sias-mp.c.uninett.no/2020-11-11/uninett-events-00:00:07.log\n", + "1875: /dynga/uninett/data/sias-mp.c.uninett.no/2020-10-18/uninett-events-00:00:07.log\n", + "1900: /dynga/uninett/data/sias-mp.c.uninett.no/2020-09-23/uninett-events-00:00:07.log\n", + "1925: /dynga/uninett/data/sias-mp.c.uninett.no/2020-07-12/uninett-events-00:00:17.log\n", + "1950: /dynga/uninett/data/sias-mp.c.uninett.no/2020-07-18/uninett-events-00:00:17.log\n", + "1975: /dynga/uninett/data/sias-mp.c.uninett.no/2020-08-19/uninett-events-00:00:17.log\n", + "2000: /dynga/uninett/data/kolla-mp.pc.uninett.no/2021-02-14/uninett-events-00:00:08.log\n", + "2025: /dynga/uninett/data/kolla-mp.pc.uninett.no/2021-01-22/uninett-events-00:00:07.log\n", + "2050: /dynga/uninett/data/kolla-mp.pc.uninett.no/2021-01-02/uninett-events-00:00:07.log\n", + "2075: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-11-22/uninett-events-00:00:08.log\n", + "2100: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-11-14/uninett-events-00:00:07.log\n", + "2125: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-10-23/uninett-events-10:37:08.log\n", + "2150: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-09-11/uninett-events-00:00:18.log\n", + "2175: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-09-08/uninett-events-00:00:17.log\n", + "2200: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-08-08/uninett-events-00:00:17.log\n", + "2225: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-07-26/uninett-events-16:19:07.log\n", + "2250: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-08-21/uninett-events-00:00:17.log\n", + "2275: /dynga/uninett/data/pil32-mp.oslomet.no/2021-03-01/uninett-events-00:00:07.log\n", + "2300: /dynga/uninett/data/pil32-mp.oslomet.no/2021-02-05/uninett-events-00:00:07.log\n", + "2325: /dynga/uninett/data/pil32-mp.oslomet.no/2021-01-12/uninett-events-00:00:07.log\n", + "2350: /dynga/uninett/data/pil32-mp.oslomet.no/2020-12-19/uninett-events-00:00:07.log\n", + "2375: /dynga/uninett/data/pil32-mp.oslomet.no/2020-11-24/uninett-events-00:00:07.log\n", + "2400: /dynga/uninett/data/pil32-mp.oslomet.no/2020-10-14/uninett-events-00:00:08.log\n", + "2425: /dynga/uninett/data/pil32-mp.oslomet.no/2020-10-29/uninett-events-00:00:07.log\n", + "2450: /dynga/uninett/data/pil32-mp.oslomet.no/2020-09-11/uninett-events-00:00:17.log\n", + "2475: /dynga/uninett/data/pil32-mp.oslomet.no/2020-07-14/uninett-events-00:00:17.log\n", + "2500: /dynga/uninett/data/pil32-mp.oslomet.no/2020-06-25/uninett-events-00:00:17.log\n", + "2525: /dynga/uninett/data/pil32-mp.oslomet.no/2020-07-09/uninett-events-00:00:17.log\n", + "2550: /dynga/uninett/data/notodden-mp.usn.no/2021-02-16/uninett-events-00:00:07.log\n", + "2575: /dynga/uninett/data/notodden-mp.usn.no/2021-01-22/uninett-events-00:00:07.log\n", + "2600: /dynga/uninett/data/notodden-mp.usn.no/2020-12-29/uninett-events-00:00:07.log\n", + "2625: /dynga/uninett/data/notodden-mp.usn.no/2020-12-05/uninett-events-00:00:07.log\n", + "2650: /dynga/uninett/data/notodden-mp.usn.no/2020-11-10/uninett-events-00:00:07.log\n", + "2675: /dynga/uninett/data/notodden-mp.usn.no/2020-10-17/uninett-events-00:00:07.log\n", + "2700: /dynga/uninett/data/notodden-mp.usn.no/2020-09-22/uninett-events-00:00:08.log\n", + "2725: /dynga/uninett/data/notodden-mp.usn.no/2020-08-01/uninett-events-00:00:18.log\n", + "2750: /dynga/uninett/data/notodden-mp.usn.no/2020-09-01/uninett-events-00:00:18.log\n", + "2775: /dynga/uninett/data/notodden-mp.usn.no/2020-07-08/uninett-events-00:00:17.log\n", + "2800: /dynga/uninett/data/honefoss-mp.usn.no/2021-02-27/uninett-events-00:00:07.log\n", + "2825: /dynga/uninett/data/honefoss-mp.usn.no/2021-02-02/uninett-events-00:00:07.log\n", + "2850: /dynga/uninett/data/honefoss-mp.usn.no/2021-01-09/uninett-events-00:00:07.log\n", + "2875: /dynga/uninett/data/honefoss-mp.usn.no/2020-12-16/uninett-events-00:00:07.log\n", + "2900: /dynga/uninett/data/honefoss-mp.usn.no/2020-11-21/uninett-events-00:00:07.log\n", + "2925: /dynga/uninett/data/honefoss-mp.usn.no/2020-10-28/uninett-events-00:00:07.log\n", + "2950: /dynga/uninett/data/honefoss-mp.usn.no/2020-10-03/uninett-events-00:00:07.log\n", + "2975: /dynga/uninett/data/honefoss-mp.usn.no/2020-09-08/uninett-events-00:00:17.log\n", + "3000: /dynga/uninett/data/honefoss-mp.usn.no/2020-08-08/uninett-events-00:00:17.log\n", + "3025: /dynga/uninett/data/honefoss-mp.usn.no/2020-08-24/uninett-events-00:00:17.log\n", + "3050: /dynga/uninett/data/honefoss-mp.usn.no/2020-07-09/uninett-events-00:00:17.log\n", + "3075: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2021-02-13/uninett-events-00:00:07.log\n", + "3100: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2021-01-19/uninett-events-00:00:07.log\n", + "3125: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-12-26/uninett-events-00:00:07.log\n", + "3150: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-12-02/uninett-events-00:00:07.log\n", + "3175: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-11-07/uninett-events-00:00:07.log\n", + "3200: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-10-14/uninett-events-00:00:08.log\n", + "3225: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-09-19/uninett-events-00:00:07.log\n", + "3250: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-08-18/uninett-events-00:00:17.log\n", + "3275: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-08-05/uninett-events-00:00:17.log\n", + "3300: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-08-14/uninett-events-00:00:18.log\n", + "3325: /dynga/uninett/data/unitosl-mp.c.uninett.no/2021-02-24/uninett-events-00:00:07.log\n", + "3350: /dynga/uninett/data/unitosl-mp.c.uninett.no/2021-01-30/uninett-events-00:00:08.log\n", + "3375: /dynga/uninett/data/unitosl-mp.c.uninett.no/2021-01-06/uninett-events-00:00:07.log\n", + "3400: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-12-13/uninett-events-00:00:07.log\n", + "3425: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-11-18/uninett-events-00:00:07.log\n", + "3450: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-10-25/uninett-events-00:00:07.log\n", + "3475: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-09-30/uninett-events-00:00:07.log\n", + "3500: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-09-06/uninett-events-00:00:17.log\n", + "3525: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-07-25/uninett-events-00:00:17.log\n", + "3550: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-08-09/uninett-events-00:00:18.log\n", + "3575: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-06-16/uninett-events-10:03:08.log\n", + "3600: /dynga/uninett/data/kongsberg-mp.usn.no/2021-02-26/uninett-events-00:00:07.log\n", + "3625: /dynga/uninett/data/kongsberg-mp.usn.no/2021-02-01/uninett-events-00:00:07.log\n", + "3650: /dynga/uninett/data/kongsberg-mp.usn.no/2021-01-08/uninett-events-00:00:07.log\n", + "3675: /dynga/uninett/data/kongsberg-mp.usn.no/2020-12-15/uninett-events-00:00:07.log\n", + "3700: /dynga/uninett/data/kongsberg-mp.usn.no/2020-11-20/uninett-events-00:00:07.log\n", + "3725: /dynga/uninett/data/kongsberg-mp.usn.no/2020-10-27/uninett-events-00:00:07.log\n", + "3750: /dynga/uninett/data/kongsberg-mp.usn.no/2020-10-02/uninett-events-00:00:07.log\n", + "3775: /dynga/uninett/data/kongsberg-mp.usn.no/2020-09-07/uninett-events-00:00:17.log\n", + "3800: /dynga/uninett/data/kongsberg-mp.usn.no/2020-08-18/uninett-events-00:00:17.log\n", + "3825: /dynga/uninett/data/kongsberg-mp.usn.no/2020-08-31/uninett-events-00:00:17.log\n", + "3850: /dynga/uninett/data/kongsberg-mp.usn.no/2020-07-08/uninett-events-00:00:17.log\n", + "3875: /dynga/uninett/data/hoytek-mp.uib.no/2021-02-12/uninett-events-00:00:08.log\n", + "3900: /dynga/uninett/data/hoytek-mp.uib.no/2021-01-18/uninett-events-00:00:07.log\n", + "3925: /dynga/uninett/data/hoytek-mp.uib.no/2020-12-29/uninett-events-00:00:07.log\n", + "3950: /dynga/uninett/data/hoytek-mp.uib.no/2020-12-05/uninett-events-00:00:07.log\n", + "3975: /dynga/uninett/data/hoytek-mp.uib.no/2020-11-10/uninett-events-00:00:07.log\n", + "4000: /dynga/uninett/data/hoytek-mp.uib.no/2020-10-17/uninett-events-00:00:07.log\n", + "4025: /dynga/uninett/data/hoytek-mp.uib.no/2020-09-22/uninett-events-00:00:07.log\n", + "4050: /dynga/uninett/data/hoytek-mp.uib.no/2020-07-29/uninett-events-00:00:17.log\n", + "4075: /dynga/uninett/data/hoytek-mp.uib.no/2020-08-15/uninett-events-00:00:17.log\n", + "4100: /dynga/uninett/data/hoytek-mp.uib.no/2020-08-11/uninett-events-10:03:08.log\n", + "4125: /dynga/uninett/data/cmi-mp.cmi.no/2021-02-27/uninett-events-00:00:07.log\n", + "4150: /dynga/uninett/data/cmi-mp.cmi.no/2021-02-02/uninett-events-00:00:07.log\n", + "4175: /dynga/uninett/data/cmi-mp.cmi.no/2021-01-09/uninett-events-00:00:07.log\n", + "4200: /dynga/uninett/data/cmi-mp.cmi.no/2020-12-16/uninett-events-00:00:07.log\n", + "4225: /dynga/uninett/data/cmi-mp.cmi.no/2020-11-21/uninett-events-00:00:07.log\n", + "4250: /dynga/uninett/data/cmi-mp.cmi.no/2020-10-28/uninett-events-00:00:07.log\n", + "4275: /dynga/uninett/data/cmi-mp.cmi.no/2020-10-03/uninett-events-00:00:08.log\n", + "4300: /dynga/uninett/data/cmi-mp.cmi.no/2020-09-09/uninett-events-00:00:17.log\n", + "4325: /dynga/uninett/data/cmi-mp.cmi.no/2020-07-07/uninett-events-00:00:17.log\n", + "4350: /dynga/uninett/data/cmi-mp.cmi.no/2020-06-30/uninett-events-00:00:17.log\n", + "4375: /dynga/uninett/data/cmi-mp.cmi.no/2020-08-04/uninett-events-00:00:18.log\n", + "4400: /dynga/uninett/data/ytelse-brg.uninett.no/2021-02-17/uninett-events-00:00:07.log\n", + "4425: /dynga/uninett/data/ytelse-brg.uninett.no/2021-01-25/uninett-events-00:00:07.log\n", + "4450: /dynga/uninett/data/ytelse-brg.uninett.no/2020-12-31/uninett-events-00:00:07.log\n", + "4475: /dynga/uninett/data/ytelse-brg.uninett.no/2020-12-06/uninett-events-06:24:07.log\n", + "4500: /dynga/uninett/data/ytelse-brg.uninett.no/2020-11-12/uninett-events-00:00:07.log\n", + "4525: /dynga/uninett/data/ytelse-brg.uninett.no/2020-10-19/uninett-events-00:00:07.log\n", + "4550: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-25/uninett-events-00:00:07.log\n", + "4575: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-08:33:07.log\n", + "4600: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-08:08:07.log\n", + "4625: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-07:43:07.log\n", + "4650: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-07:18:07.log\n", + "4675: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-06:53:07.log\n", + "4700: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-06:28:08.log\n", + "4725: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-06:03:07.log\n", + "4750: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-05:38:07.log\n", + "4775: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-05:13:07.log\n", + "4800: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-04:48:07.log\n", + "4825: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-04:23:07.log\n", + "4850: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-03:58:08.log\n", + "4875: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-03:33:07.log\n", + "4900: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-03:08:07.log\n", + "4925: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-02:43:07.log\n", + "4950: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-02:18:07.log\n", + "4975: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-01:53:08.log\n", + "5000: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-01:28:07.log\n", + "5025: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-01:03:07.log\n", + "5050: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-00:38:07.log\n", + "5075: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-17/uninett-events-00:13:07.log\n", + "5100: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-23:55:07.log\n", + "5125: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-23:30:07.log\n", + "5150: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-23:05:07.log\n", + "5175: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-22:40:07.log\n", + "5200: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-22:15:07.log\n", + "5225: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-21:50:07.log\n", + "5250: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-21:25:07.log\n", + "5275: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-21:00:07.log\n", + "5300: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-20:35:07.log\n", + "5325: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-20:10:07.log\n", + "5350: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-19:45:07.log\n", + "5375: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-19:20:07.log\n", + "5400: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-18:55:08.log\n", + "5425: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-18:30:07.log\n", + "5450: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-18:05:07.log\n", + "5475: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-17:40:07.log\n", + "5500: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-17:15:07.log\n", + "5525: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-16:50:07.log\n", + "5550: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-16:25:07.log\n", + "5575: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-16:00:07.log\n", + "5600: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-15:35:07.log\n", + "5625: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-15:10:07.log\n", + "5650: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-14:45:07.log\n", + "5675: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-14:20:07.log\n", + "5700: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-13:55:07.log\n", + "5725: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-13:30:07.log\n", + "5750: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-13:05:07.log\n", + "5775: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-12:40:07.log\n", + "5800: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-12:15:08.log\n", + "5825: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-11:50:08.log\n", + "5850: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-11:25:07.log\n", + "5875: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-11:00:08.log\n", + "5900: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-10:35:07.log\n", + "5925: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-10:10:08.log\n", + "5950: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-09:45:07.log\n", + "5975: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-09:20:07.log\n", + "6000: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-08:55:07.log\n", + "6025: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-08:30:07.log\n", + "6050: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-08:05:07.log\n", + "6075: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-07:40:08.log\n", + "6100: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-07:15:08.log\n", + "6125: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-06:50:07.log\n", + "6150: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-06:25:07.log\n", + "6175: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-06:00:07.log\n", + "6200: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-05:35:08.log\n", + "6225: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-05:10:07.log\n", + "6250: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-04:45:08.log\n", + "6275: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-04:20:07.log\n", + "6300: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-03:55:07.log\n", + "6325: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-03:30:07.log\n", + "6350: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-03:05:08.log\n", + "6375: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-02:40:07.log\n", + "6400: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-02:15:07.log\n", + "6425: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-01:50:07.log\n", + "6450: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-01:25:07.log\n", + "6475: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-01:00:07.log\n", + "6500: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-00:35:07.log\n", + "6525: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-09/uninett-events-00:10:07.log\n", + "6550: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-23:50:07.log\n", + "6575: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-23:25:07.log\n", + "6600: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-23:00:07.log\n", + "6625: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-22:35:07.log\n", + "6650: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-22:10:07.log\n", + "6675: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-21:45:07.log\n", + "6700: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-21:20:07.log\n", + "6725: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-20:55:07.log\n", + "6750: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-20:30:07.log\n", + "6775: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-20:05:07.log\n", + "6800: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-19:40:08.log\n", + "6825: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-19:15:07.log\n", + "6850: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-18:50:08.log\n", + "6875: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-18:25:07.log\n", + "6900: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-18:00:07.log\n", + "6925: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-17:35:07.log\n", + "6950: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-17:10:07.log\n", + "6975: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-16:45:07.log\n", + "7000: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-16:20:07.log\n", + "7025: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-15:55:07.log\n", + "7050: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-15:30:07.log\n", + "7075: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-15:05:08.log\n", + "7100: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-14:40:08.log\n", + "7125: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-14:15:07.log\n", + "7150: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-13:50:07.log\n", + "7175: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-13:25:07.log\n", + "7200: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-13:00:07.log\n", + "7225: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-12:35:07.log\n", + "7250: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-12:10:07.log\n", + "7275: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-11:45:07.log\n", + "7300: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-11:20:07.log\n", + "7325: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-10:55:07.log\n", + "7350: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-10:30:07.log\n", + "7375: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-10:05:07.log\n", + "7400: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-09:40:07.log\n", + "7425: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-09:15:08.log\n", + "7450: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-08:50:08.log\n", + "7475: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-08:25:07.log\n", + "7500: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-08:00:07.log\n", + "7525: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-07:35:07.log\n", + "7550: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-07:10:07.log\n", + "7575: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-06:45:07.log\n", + "7600: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-06:20:08.log\n", + "7625: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-05:55:07.log\n", + "7650: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-05:30:07.log\n", + "7675: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-05:05:07.log\n", + "7700: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-04:40:07.log\n", + "7725: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-04:15:07.log\n", + "7750: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-03:50:07.log\n", + "7775: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-03:25:07.log\n", + "7800: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-03:00:07.log\n", + "7825: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-02:35:07.log\n", + "7850: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-02:10:07.log\n", + "7875: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-01:45:07.log\n", + "7900: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-01:20:07.log\n", + "7925: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-00:55:07.log\n", + "7950: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-00:30:07.log\n", + "7975: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-03/uninett-events-00:05:07.log\n", + "8000: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-23:40:08.log\n", + "8025: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-23:15:07.log\n", + "8050: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-22:50:07.log\n", + "8075: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-22:25:07.log\n", + "8100: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-22:00:07.log\n", + "8125: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-21:35:08.log\n", + "8150: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-21:10:07.log\n", + "8175: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-20:45:07.log\n", + "8200: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-20:20:07.log\n", + "8225: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-19:55:07.log\n", + "8250: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-19:30:07.log\n", + "8275: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-19:05:07.log\n", + "8300: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-18:40:07.log\n", + "8325: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-18:15:07.log\n", + "8350: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-17:50:07.log\n", + "8375: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-17:25:08.log\n", + "8400: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-17:00:07.log\n", + "8425: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-16:35:07.log\n", + "8450: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-16:10:07.log\n", + "8475: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-15:45:07.log\n", + "8500: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-15:20:07.log\n", + "8525: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-14:55:07.log\n", + "8550: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-14:30:08.log\n", + "8575: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-14:05:07.log\n", + "8600: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-13:40:07.log\n", + "8625: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-13:15:07.log\n", + "8650: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-12:50:07.log\n", + "8675: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-12:25:08.log\n", + "8700: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-12:00:07.log\n", + "8725: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-11:35:07.log\n", + "8750: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-11:10:07.log\n", + "8775: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-10:45:07.log\n", + "8800: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-10:20:08.log\n", + "8825: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-09:55:07.log\n", + "8850: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-09:30:07.log\n", + "8875: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-09:05:07.log\n", + "8900: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-08:40:08.log\n", + "8925: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-08:15:07.log\n", + "8950: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-07:50:07.log\n", + "8975: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-07:25:07.log\n", + "9000: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-07:00:08.log\n", + "9025: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-06:35:07.log\n", + "9050: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-06:10:07.log\n", + "9075: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-05:45:07.log\n", + "9100: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-05:20:07.log\n", + "9125: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-04:55:07.log\n", + "9150: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-04:30:07.log\n", + "9175: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-04:05:07.log\n", + "9200: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-03:40:07.log\n", + "9225: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-03:15:07.log\n", + "9250: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-02:50:07.log\n", + "9275: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-02:25:07.log\n", + "9300: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-02:00:07.log\n", + "9325: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-01:35:07.log\n", + "9350: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-01:10:07.log\n", + "9375: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-00:45:07.log\n", + "9400: /dynga/uninett/data/ytelse-brg.uninett.no/2020-09-02/uninett-events-00:20:07.log\n", + "9425: /dynga/uninett/data/ytelse-brg.uninett.no/2020-08-28/uninett-events-00:00:17.log\n", + "9450: /dynga/uninett/data/ytelse-brg.uninett.no/2020-08-04/uninett-events-00:00:17.log\n", + "9475: /dynga/uninett/data/ytelse-brg.uninett.no/2020-07-12/uninett-events-00:00:17.log\n", + "9500: /dynga/uninett/data/ytelse-brg.uninett.no/2020-06-18/uninett-events-00:00:17.log\n", + "9525: /dynga/uninett/data/ytelse-brg.uninett.no/2020-05-26/uninett-events-00:00:17.log\n", + "9550: /dynga/uninett/data/ytelse-tos.uninett.no/2021-03-01/uninett-events-00:00:07.log\n", + "9575: /dynga/uninett/data/ytelse-tos.uninett.no/2021-02-09/uninett-events-00:00:07.log\n", + "9600: /dynga/uninett/data/ytelse-tos.uninett.no/2021-01-16/uninett-events-00:00:07.log\n", + "9625: /dynga/uninett/data/ytelse-tos.uninett.no/2020-12-23/uninett-events-00:00:07.log\n", + "9650: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-29/uninett-events-00:00:07.log\n", + "9675: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-07:38:08.log\n", + "9700: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-07:13:07.log\n", + "9725: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-06:48:07.log\n", + "9750: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-06:23:07.log\n", + "9775: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-05:58:07.log\n", + "9800: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-05:33:07.log\n", + "9825: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-05:08:07.log\n", + "9850: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-04:43:08.log\n", + "9875: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-04:18:08.log\n", + "9900: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-03:53:07.log\n", + "9925: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-03:28:07.log\n", + "9950: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-03:03:07.log\n", + "9975: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-02:38:07.log\n", + "10000: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-02:13:07.log\n", + "10025: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-01:48:07.log\n", + "10050: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-01:23:07.log\n", + "10075: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-00:58:07.log\n", + "10100: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-00:33:07.log\n", + "10125: /dynga/uninett/data/ytelse-tos.uninett.no/2020-11-05/uninett-events-00:08:07.log\n", + "10150: /dynga/uninett/data/ytelse-tos.uninett.no/2020-10-20/uninett-events-00:00:07.log\n", + "\t[error] file:10150, line:4190: Unexpected character found when decoding array value (2)\n", + "10175: /dynga/uninett/data/ytelse-tos.uninett.no/2020-09-26/uninett-events-00:00:07.log\n", + "10200: /dynga/uninett/data/ytelse-tos.uninett.no/2020-09-04/uninett-events-00:01:07.log\n" + ] + } + ], + "source": [ + "gap_list = []\n", + "root_path = pathlib.Path(ROOT_DIR)\n", + "loop0_done = False\n", + "\n", + "for i, path in enumerate(root_path.rglob(pattern=FILE_PATTERN), 1):\n", + "\n", + " if loop0_done:\n", + " break\n", + " \n", + " if (i % 25) == 0:\n", + " print(f\"{i}: {path}\")\n", + " \n", + " with path.open() as f:\n", + " for j, line in enumerate(f, 1):\n", + "\n", + " #if (j % 10000) == 0:\n", + " # print(f\"\\t{j}: {None}\")\n", + " \n", + " if '\"gap\"' in line:\n", + " \n", + " try:\n", + " gap_list.append(json.loads(line))\n", + " except Exception as e:\n", + " print(f\"\\t[error] file:{i}, line:{j}: {e}\")\n", + " \n", + " if len(gap_list) >= GAP_LIST_LENGTH:\n", + " loop0_done = True\n", + " break\n", + "\n", + "# print(len(gap_list))\n", + "# print(gap_list[:3])" + ] + }, + { + "cell_type": "code", + "execution_count": 205, + "id": "interstate-cannon", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10000\n", + "{'@date': '2021-03-04T00:02:27.822', 'dTTL': 0, 'datetime': '2021-03-04T00:02:27.822', 'event_type': 'gap', 'from': 'borre-mp.usn.no', 'from_adr': '128.39.19.150', 'h_ddelay': 0.079, 'h_delay': 1.128, 'h_jit': 0.029, 'h_min_d': 1.049, 'h_n': 50, 'h_slope_10': 0, 'h_slope_20': 0, 'h_slope_30': 0, 'h_slope_40': 0, 'h_slope_50': 0.001, 'overlap': 1, 'rdelay': [0.10228157043457, 0.0791549682617188, 0.0462532043457031, 0.0443458557128906, 0.107288360595703, 0.0422000885009766, 0.0462532043457031, 0.080108642578125, 0.107049942016602, 0.0832080841064453, 0.110387802124023, 0.0622272491455078, 0.0851154327392578, 0.0841617584228516, 0.0782012939453125, 0.0603199005126953, 0.0963211059570312, 0.0982284545898438, 0.0593662261962891, 0.107288360595703, 0.0841617584228516, 0.0493526458740234, 0.0803470611572266, 0.0760555267333984, 0.0500679016113281, 0.130176544189453, 0.0772476196289062, 0.100374221801758, 0.12516975402832, 0.0631809234619141, 0.0691413879394531, 0.116109848022461, 0.0972747802734375, 0.118255615234375, 0.0901222229003906, 0.03814697265625, 0.0541210174560547, 0.0832080841064453, 0.0441074371337891, 0.0510215759277344, 0.0340938568115234, 0.0643730163574219, 0.0722408294677734, 0.0970363616943359, 0.0882148742675781, 0.0643730163574219, 0.0751018524169922, 0.057220458984375, 0.144243240356445, 0.0951290130615234], 'rtx': [9.99307632446289, 39.992094039917, 50.0030517578125, 59.9899291992188, 70.004940032959, 79.9911022186279, 90.0099277496338, 99.9898910522461, 109.991073608398, 119.988918304443, 130.002975463867, 140.000104904175, 149.996042251587, 159.995079040527, 169.992923736572, 179.996013641357, 189.990043640137, 200.006008148193, 209.987878799438, 219.995975494385, 229.994058609009, 240.000009536743, 250.005006790161, 259.989976882935, 269.954919815063, 279.942035675049, 289.947986602783, 299.94010925293, 309.953927993774, 319.938898086548, 329.933881759644, 339.94197845459, 349.935054779053, 359.946966171265, 369.944095611572, 379.930973052979, 389.939069747925, 399.971008300781, 409.934043884277, 419.949054718018, 429.941892623901, 439.94402885437, 449.942111968994, 459.944009780884, 469.945907592773, 479.943037033081, 489.949941635132, 499.944925308228, 509.944915771484], 't_ddelay': 0.81, 't_delay': 1.859, 't_jit': 0.017, 't_min_d': 1.049, 't_n': 49, 't_slope_10': 0, 't_slope_20': 0, 't_slope_30': 0, 't_slope_40': 0, 't_slope_50': 0, 'timestamp': 1614812547.82201, 'timestamp_zone': 'GMT', 'tloss': 320, 'to': 'ytelse-osl.uninett.no', 'to_adr': '158.39.1.126'}\n" + ] + } + ], + "source": [ + "print(len(gap_list))\n", + "print(gap_list[0])" + ] + }, + { + "cell_type": "markdown", + "id": "linear-marijuana", + "metadata": {}, + "source": [ + "#### Reduce columns" + ] + }, + { + "cell_type": "code", + "execution_count": 217, + "id": "intimate-third", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10000\n", + "[{'dTTL': 0, 'h_ddelay': 0.079, 'h_delay': 1.128, 'h_jit': 0.029, 'h_min_d': 1.049, 'h_slope_10': 0, 'h_slope_50': 0.001, 't_ddelay': 0.81, 't_delay': 1.859, 't_jit': 0.017, 't_min_d': 1.049, 't_slope_10': 0, 't_slope_50': 0, 'tloss': 320}]\n" + ] + } + ], + "source": [ + "selected_features = {\n", + " # key: 0 or 1 to select\n", + " 'dTTL': 1,\n", + " 'h_ddelay': 1,\n", + " 'h_delay': 1,\n", + " 'h_jit': 1,\n", + " 'h_min_d': 1,\n", + " 'h_slope_10': 1,\n", + " 'h_slope_50': 1,\n", + " 'tloss': 1,\n", + " 't_ddelay': 1,\n", + " 't_delay': 1,\n", + " 't_jit': 1,\n", + " 't_min_d': 1,\n", + " 't_slope_10': 1,\n", + " 't_slope_10': 1,\n", + " 't_slope_50': 1,\n", + "}\n", + "reduced_gap_list = [ { k:v for k,v in gap.items() if selected_features.get(k) } for gap in gap_list]\n", + "print(len(reduced_gap_list))\n", + "print(reduced_gap_list[:1])" + ] + }, + { + "cell_type": "markdown", + "id": "adapted-beach", + "metadata": {}, + "source": [ + "#### Transform list of gap-objects to numpy array of features\n", + "list[object] -> array-like\n" + ] + }, + { + "cell_type": "code", + "execution_count": 218, + "id": "seven-gauge", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10000\n", + "[[ 0.00000e+00 7.90000e-02 1.12800e+00 2.90000e-02 1.04900e+00\n", + " 0.00000e+00 1.00000e-03 8.10000e-01 1.85900e+00 1.70000e-02\n", + " 1.04900e+00 0.00000e+00 0.00000e+00 3.20000e+02]\n", + " [ 0.00000e+00 5.60000e-02 5.06000e-01 2.40000e-02 4.50000e-01\n", + " 0.00000e+00 0.00000e+00 1.84400e+00 2.29400e+00 2.60000e-02\n", + " 4.50000e-01 0.00000e+00 0.00000e+00 4.00990e+03]\n", + " [ 0.00000e+00 4.20000e-02 7.58000e-01 1.60000e-02 7.16000e-01\n", + " 0.00000e+00 0.00000e+00 1.84800e+00 2.56400e+00 2.10000e-02\n", + " 7.16000e-01 0.00000e+00 0.00000e+00 4.01000e+03]\n", + " [ 0.00000e+00 1.49600e+00 1.89900e+00 1.54600e+00 4.03000e-01\n", + " 1.50000e-02 3.26000e-01 4.34000e-01 8.37000e-01 5.34000e-01\n", + " 4.03000e-01 -5.90000e-02 -2.00000e-03 5.00000e+01]\n", + " [ 0.00000e+00 7.20000e-02 1.82000e+00 1.90000e-02 1.74800e+00\n", + " 0.00000e+00 0.00000e+00 2.70000e-02 1.22200e+00 1.70000e-02\n", + " 1.19500e+00 0.00000e+00 0.00000e+00 4.00000e+02]\n", + " [ 0.00000e+00 2.46000e-01 7.18500e+00 7.40000e-02 6.93900e+00\n", + " 0.00000e+00 -1.00000e-03 1.78000e-01 4.13600e+00 6.50000e-02\n", + " 3.95800e+00 0.00000e+00 0.00000e+00 5.00000e+01]\n", + " [ 0.00000e+00 1.06000e-01 7.11100e+00 1.70000e-02 7.00500e+00\n", + " 0.00000e+00 0.00000e+00 3.20000e-02 4.03300e+00 1.80000e-02\n", + " 4.00100e+00 0.00000e+00 0.00000e+00 5.00000e+01]\n", + " [ 0.00000e+00 2.75440e+01 2.79330e+01 5.21800e+00 3.89000e-01\n", + " 1.94000e-01 1.91800e+00 5.41270e+01 5.45160e+01 5.89400e+00\n", + " 3.89000e-01 -1.03000e-01 -1.52000e-01 1.00000e+02]\n", + " [ 0.00000e+00 6.10000e-02 4.32000e+00 2.10000e-02 4.25900e+00\n", + " 0.00000e+00 0.00000e+00 6.60000e-02 4.32500e+00 2.30000e-02\n", + " 4.25900e+00 0.00000e+00 0.00000e+00 1.10000e+02]\n", + " [ 0.00000e+00 1.45394e+02 1.49378e+02 1.33000e+01 3.98400e+00\n", + " 7.47000e-01 -8.90000e-01 1.11400e+00 5.09800e+00 1.26300e+00\n", + " 3.98400e+00 -8.90000e-02 -1.10000e-02 1.60000e+02]]\n" + ] + } + ], + "source": [ + "vectorizer = DictVectorizer(sparse=False)\n", + "\n", + "gap_array = vectorizer.fit_transform(reduced_gap_list)\n", + "print(len(gap_array))\n", + "print(gap_array[:10])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "instructional-writer", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "comfortable-thompson", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "flexible-scroll", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "upset-protest", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "monetary-dakota", + "metadata": {}, + "source": [ + "### analyze gap_list" + ] + }, + { + "cell_type": "code", + "execution_count": 172, + "id": "needed-authority", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0. 320. ]\n", + " [ 0. 4009.9]]\n", + "Computing label assignment and total inertia\n", + "[320]\n", + "[0.001, 0, 0, 0.326, 0, -0.001, 0, 1.918, 0, -0.89]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# feature extraction / normalization / scaling / vectorization\n", + "\n", + "print(gaps_prepared[:2])\n", + "\n", + "# partial_fit(gaps_prepared)\n", + "#kmeans.partial_fit(X=gaps_prepared)\n", + "\n", + "ss = sklearn.metrics.silhouette_score(X=gaps_prepared, labels=kmeans.predict(gaps_prepared))\n", + "# print(f\"silhouette score: {ss}\")\n", + "\n", + "tloss = [ gap['tloss'] for gap in gap_list]\n", + "hslopes10 = [ gap['h_slope_50'] for gap in gap_list ]\n", + "tslopes10 = [ gap['t_slope_10'] for gap in gap_list ]\n", + "hjit = [ gap['h_jit'] for gap in gap_list ]\n", + "\n", + "x = tloss\n", + "y = hslopes10\n", + "\n", + "print(x[:1])\n", + "print(y[:10])\n", + "\n", + "# plt.scatter(data=gap_list)\n", + "# plt.plot(xlabel='tloss', ylabel='h_slope_10', marker='o', data=gap_list)\n", + "# plt.plot(data=gap_list)\n", + "plt.figure(figsize=(10,5), dpi=100)\n", + "plt.scatter(x, y)\n", + "plt.xlim(min(x), 2000)\n", + "# plt.ylim(0, 2)\n", + "# plt.set(xlabel='tloss', ylabel='h_slope_10', title='About as simple as it gets, folks')\n", + "plt.grid()\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "unavailable-swimming", + "metadata": {}, + "source": [ + "### Independent block\n", + "Read and buffer gaps from raw logs \n", + "batch fit kmeans" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "advised-aircraft", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "20: /dynga/uninett/data/ytelse-osl.uninett.no/2021-02-20/uninett-events-00:00:07.log gap_list=49\n", + "40: /dynga/uninett/data/ytelse-osl.uninett.no/2021-02-01/uninett-events-00:00:07.log gap_list=99\n", + "60: /dynga/uninett/data/ytelse-osl.uninett.no/2021-01-13/uninett-events-00:00:07.log gap_list=143\n", + "80: /dynga/uninett/data/ytelse-osl.uninett.no/2020-12-24/uninett-events-00:00:07.log gap_list=185\n", + "100: /dynga/uninett/data/ytelse-osl.uninett.no/2020-12-05/uninett-events-00:00:07.log gap_list=258\n", + "120: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-15/uninett-events-00:00:07.log gap_list=824\n", + "140: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-07:32:08.log gap_list=1238\n", + "160: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-07:12:07.log gap_list=1238\n", + "180: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-06:52:07.log gap_list=1238\n", + "200: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-06:32:07.log gap_list=1238\n", + "220: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-06:12:07.log gap_list=1238\n", + "240: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-05:52:07.log gap_list=1238\n", + "260: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-05:32:07.log gap_list=1238\n", + "280: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-05:12:08.log gap_list=1238\n", + "300: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-04:52:07.log gap_list=1238\n", + "320: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-04:32:07.log gap_list=1238\n", + "340: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-04:12:07.log gap_list=1238\n", + "360: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-03:52:08.log gap_list=1238\n", + "380: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-03:32:08.log gap_list=1238\n", + "400: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-03:12:07.log gap_list=1238\n", + "420: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-02:52:08.log gap_list=1238\n", + "440: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-02:32:07.log gap_list=1238\n", + "460: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-02:12:07.log gap_list=1238\n", + "480: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-01:52:07.log gap_list=1238\n", + "500: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-01:32:07.log gap_list=1238\n", + "520: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-01:12:07.log gap_list=1238\n", + "540: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-00:52:07.log gap_list=1238\n", + "560: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-00:32:07.log gap_list=1238\n", + "580: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-05/uninett-events-00:12:08.log gap_list=1238\n", + "600: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-09:37:07.log gap_list=1238\n", + "620: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-09:17:07.log gap_list=1238\n", + "640: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-08:57:07.log gap_list=1238\n", + "660: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-08:37:07.log gap_list=1238\n", + "680: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-08:17:07.log gap_list=1238\n", + "700: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-07:57:07.log gap_list=1238\n", + "720: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-07:37:07.log gap_list=1238\n", + "740: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-07:17:07.log gap_list=1238\n", + "760: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-06:57:07.log gap_list=1238\n", + "780: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-06:37:07.log gap_list=1238\n", + "800: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-06:17:07.log gap_list=1238\n", + "820: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-05:57:07.log gap_list=1238\n", + "840: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-05:37:07.log gap_list=1238\n", + "860: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-05:17:07.log gap_list=1238\n", + "880: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-04:57:07.log gap_list=1238\n", + "900: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-04:37:07.log gap_list=1238\n", + "920: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-04:17:07.log gap_list=1238\n", + "940: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-03:57:07.log gap_list=1238\n", + "960: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-03:37:07.log gap_list=1238\n", + "980: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-03:17:07.log gap_list=1238\n", + "1000: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-02:57:07.log gap_list=1238\n", + "1020: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-02:37:07.log gap_list=1238\n", + "1040: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-02:17:08.log gap_list=1238\n", + "1060: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-01:57:07.log gap_list=1238\n", + "1080: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-01:37:07.log gap_list=1238\n", + "1100: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-01:17:07.log gap_list=1238\n", + "1120: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-00:57:07.log gap_list=1238\n", + "1140: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-00:37:07.log gap_list=1238\n", + "1160: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-04/uninett-events-00:17:07.log gap_list=1238\n", + "1180: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-02/uninett-events-14:16:08.log gap_list=1238\n", + "1200: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-02/uninett-events-13:56:07.log gap_list=1238\n", + "1220: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-02/uninett-events-13:36:07.log gap_list=1238\n", + "1240: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-02/uninett-events-13:16:07.log gap_list=1238\n", + "1260: /dynga/uninett/data/ytelse-osl.uninett.no/2020-11-02/uninett-events-12:56:07.log gap_list=1238\n", + "1280: /dynga/uninett/data/khio-mp.c.uninett.no/2021-03-02/uninett-events-00:00:07.log gap_list=1238\n", + "1300: /dynga/uninett/data/khio-mp.c.uninett.no/2021-02-12/uninett-events-00:00:07.log gap_list=1238\n", + "1320: /dynga/uninett/data/khio-mp.c.uninett.no/2021-01-23/uninett-events-00:00:07.log gap_list=1245\n", + "1340: /dynga/uninett/data/khio-mp.c.uninett.no/2021-01-04/uninett-events-00:00:08.log gap_list=1248\n", + "1360: /dynga/uninett/data/khio-mp.c.uninett.no/2020-12-16/uninett-events-00:00:07.log gap_list=1251\n", + "1380: /dynga/uninett/data/khio-mp.c.uninett.no/2020-11-26/uninett-events-00:00:07.log gap_list=1257\n", + "1400: /dynga/uninett/data/khio-mp.c.uninett.no/2020-11-06/uninett-events-00:00:07.log gap_list=1275\n", + "1420: /dynga/uninett/data/khio-mp.c.uninett.no/2020-10-18/uninett-events-00:00:07.log gap_list=1276\n", + "1440: /dynga/uninett/data/khio-mp.c.uninett.no/2020-09-28/uninett-events-00:00:07.log gap_list=1286\n", + "1460: /dynga/uninett/data/blaasal-mp.uninett.no/2021-03-02/uninett-events-00:00:07.log gap_list=1290\n", + "1480: /dynga/uninett/data/blaasal-mp.uninett.no/2021-02-11/uninett-events-00:00:07.log gap_list=1290\n", + "1500: /dynga/uninett/data/blaasal-mp.uninett.no/2021-01-22/uninett-events-00:00:07.log gap_list=1290\n", + "1520: /dynga/uninett/data/blaasal-mp.uninett.no/2021-01-03/uninett-events-00:00:08.log gap_list=1290\n", + "1540: /dynga/uninett/data/blaasal-mp.uninett.no/2020-12-15/uninett-events-00:00:07.log gap_list=1290\n", + "1560: /dynga/uninett/data/blaasal-mp.uninett.no/2020-11-25/uninett-events-00:00:07.log gap_list=1290\n", + "1580: /dynga/uninett/data/blaasal-mp.uninett.no/2020-11-05/uninett-events-00:00:07.log gap_list=1290\n", + "1600: /dynga/uninett/data/blaasal-mp.uninett.no/2020-10-17/uninett-events-00:00:07.log gap_list=1290\n", + "1620: /dynga/uninett/data/blaasal-mp.uninett.no/2020-09-27/uninett-events-00:00:08.log gap_list=1290\n", + "1640: /dynga/uninett/data/blaasal-mp.uninett.no/2020-09-08/uninett-events-00:00:17.log gap_list=1290\n", + "1660: /dynga/uninett/data/blaasal-mp.uninett.no/2020-08-18/uninett-events-00:00:17.log gap_list=1290\n", + "1680: /dynga/uninett/data/blaasal-mp.uninett.no/2020-08-13/uninett-events-00:00:17.log gap_list=1290\n", + "1700: /dynga/uninett/data/blaasal-mp.uninett.no/2020-06-23/uninett-events-00:00:17.log gap_list=1290\n", + "1720: /dynga/uninett/data/blaasal-mp.uninett.no/2020-07-14/uninett-events-00:00:17.log gap_list=1290\n", + "1740: /dynga/uninett/data/sias-mp.c.uninett.no/2021-02-27/uninett-events-00:00:07.log gap_list=1292\n", + "1760: /dynga/uninett/data/sias-mp.c.uninett.no/2021-02-07/uninett-events-00:00:07.log gap_list=1293\n", + "1780: /dynga/uninett/data/sias-mp.c.uninett.no/2021-01-19/uninett-events-00:00:07.log gap_list=1298\n", + "1800: /dynga/uninett/data/sias-mp.c.uninett.no/2020-12-30/uninett-events-00:00:07.log gap_list=1300\n", + "1820: /dynga/uninett/data/sias-mp.c.uninett.no/2020-12-11/uninett-events-00:00:07.log gap_list=1304\n", + "1840: /dynga/uninett/data/sias-mp.c.uninett.no/2020-11-21/uninett-events-00:00:07.log gap_list=1306\n", + "1860: /dynga/uninett/data/sias-mp.c.uninett.no/2020-11-02/uninett-events-00:00:07.log gap_list=1307\n", + "1880: /dynga/uninett/data/sias-mp.c.uninett.no/2020-10-13/uninett-events-00:00:07.log gap_list=1311\n", + "1900: /dynga/uninett/data/sias-mp.c.uninett.no/2020-09-23/uninett-events-00:00:07.log gap_list=1318\n", + "1920: /dynga/uninett/data/sias-mp.c.uninett.no/2020-07-04/uninett-events-00:00:17.log gap_list=1326\n", + "1940: /dynga/uninett/data/sias-mp.c.uninett.no/2020-07-08/uninett-events-00:00:17.log gap_list=1327\n", + "1960: /dynga/uninett/data/sias-mp.c.uninett.no/2020-07-17/uninett-events-00:00:17.log gap_list=1327\n", + "1980: /dynga/uninett/data/sias-mp.c.uninett.no/2020-08-11/uninett-events-00:00:17.log gap_list=1327\n", + "2000: /dynga/uninett/data/kolla-mp.pc.uninett.no/2021-02-14/uninett-events-00:00:08.log gap_list=1327\n", + "2020: /dynga/uninett/data/kolla-mp.pc.uninett.no/2021-01-28/uninett-events-00:00:07.log gap_list=1327\n", + "2040: /dynga/uninett/data/kolla-mp.pc.uninett.no/2021-01-15/uninett-events-10:48:08.log gap_list=1327\n", + "2060: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-12-21/uninett-events-00:00:07.log gap_list=1327\n", + "2080: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-11-30/uninett-events-00:00:07.log gap_list=1327\n", + "2100: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-11-14/uninett-events-00:00:07.log gap_list=1327\n", + "2120: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-10-31/uninett-events-00:00:07.log gap_list=1327\n", + "2140: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-10-07/uninett-events-00:00:07.log gap_list=1327\n", + "2160: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-09-25/uninett-events-00:00:07.log gap_list=1327\n", + "2180: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-08-14/uninett-events-00:00:17.log gap_list=1327\n", + "2200: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-08-08/uninett-events-00:00:17.log gap_list=1327\n", + "2220: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-07-07/uninett-events-00:00:17.log gap_list=1327\n", + "2240: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-07-21/uninett-events-15:01:07.log gap_list=1327\n", + "2260: /dynga/uninett/data/kolla-mp.pc.uninett.no/2020-07-24/uninett-events-20:01:07.log gap_list=1327\n", + "2280: /dynga/uninett/data/pil32-mp.oslomet.no/2021-02-25/uninett-events-00:00:07.log gap_list=1328\n", + "2300: /dynga/uninett/data/pil32-mp.oslomet.no/2021-02-05/uninett-events-00:00:07.log gap_list=1330\n", + "2320: /dynga/uninett/data/pil32-mp.oslomet.no/2021-01-16/uninett-events-00:00:07.log gap_list=1336\n", + "2340: /dynga/uninett/data/pil32-mp.oslomet.no/2020-12-28/uninett-events-00:00:08.log gap_list=1340\n", + "2360: /dynga/uninett/data/pil32-mp.oslomet.no/2020-12-09/uninett-events-00:00:07.log gap_list=1347\n", + "2380: /dynga/uninett/data/pil32-mp.oslomet.no/2020-11-19/uninett-events-00:00:07.log gap_list=1352\n", + "2400: /dynga/uninett/data/pil32-mp.oslomet.no/2020-10-14/uninett-events-00:00:08.log gap_list=1352\n", + "2420: /dynga/uninett/data/pil32-mp.oslomet.no/2020-10-08/uninett-events-00:00:07.log gap_list=1352\n", + "2440: /dynga/uninett/data/pil32-mp.oslomet.no/2020-10-13/uninett-events-00:00:07.log gap_list=1353\n", + "2460: /dynga/uninett/data/pil32-mp.oslomet.no/2020-08-09/uninett-events-00:00:18.log gap_list=1355\n", + "2480: /dynga/uninett/data/pil32-mp.oslomet.no/2020-08-25/uninett-events-00:00:17.log gap_list=1356\n", + "2500: /dynga/uninett/data/pil32-mp.oslomet.no/2020-06-25/uninett-events-00:00:17.log gap_list=1358\n", + "2520: /dynga/uninett/data/pil32-mp.oslomet.no/2020-07-26/uninett-events-00:00:17.log gap_list=1360\n", + "2540: /dynga/uninett/data/notodden-mp.usn.no/2021-02-26/uninett-events-00:00:07.log gap_list=1361\n", + "2560: /dynga/uninett/data/notodden-mp.usn.no/2021-02-06/uninett-events-00:00:07.log gap_list=1361\n", + "2580: /dynga/uninett/data/notodden-mp.usn.no/2021-01-17/uninett-events-00:00:07.log gap_list=1364\n", + "2600: /dynga/uninett/data/notodden-mp.usn.no/2020-12-29/uninett-events-00:00:07.log gap_list=1364\n", + "2620: /dynga/uninett/data/notodden-mp.usn.no/2020-12-10/uninett-events-00:00:07.log gap_list=1365\n", + "2640: /dynga/uninett/data/notodden-mp.usn.no/2020-11-20/uninett-events-00:00:07.log gap_list=1367\n", + "2660: /dynga/uninett/data/notodden-mp.usn.no/2020-11-01/uninett-events-00:00:08.log gap_list=1370\n", + "2680: /dynga/uninett/data/notodden-mp.usn.no/2020-10-12/uninett-events-00:00:07.log gap_list=1370\n", + "2700: /dynga/uninett/data/notodden-mp.usn.no/2020-09-22/uninett-events-00:00:08.log gap_list=1376\n", + "2720: /dynga/uninett/data/notodden-mp.usn.no/2020-07-15/uninett-events-00:00:17.log gap_list=1380\n", + "2740: /dynga/uninett/data/notodden-mp.usn.no/2020-07-23/uninett-events-00:00:17.log gap_list=1382\n", + "2760: /dynga/uninett/data/notodden-mp.usn.no/2020-07-30/uninett-events-00:00:17.log gap_list=1383\n", + "2780: /dynga/uninett/data/notodden-mp.usn.no/2020-08-12/uninett-events-00:00:17.log gap_list=1383\n", + "2800: /dynga/uninett/data/honefoss-mp.usn.no/2021-02-27/uninett-events-00:00:07.log gap_list=1387\n", + "2820: /dynga/uninett/data/honefoss-mp.usn.no/2021-02-07/uninett-events-00:00:07.log gap_list=1390\n", + "2840: /dynga/uninett/data/honefoss-mp.usn.no/2021-01-18/uninett-events-00:00:07.log gap_list=1390\n", + "2860: /dynga/uninett/data/honefoss-mp.usn.no/2020-12-30/uninett-events-00:00:07.log gap_list=1390\n", + "2880: /dynga/uninett/data/honefoss-mp.usn.no/2020-12-11/uninett-events-00:00:07.log gap_list=1395\n", + "2900: /dynga/uninett/data/honefoss-mp.usn.no/2020-11-21/uninett-events-00:00:07.log gap_list=1398\n", + "2920: /dynga/uninett/data/honefoss-mp.usn.no/2020-11-02/uninett-events-00:00:07.log gap_list=1402\n", + "2940: /dynga/uninett/data/honefoss-mp.usn.no/2020-10-13/uninett-events-00:00:08.log gap_list=1404\n", + "2960: /dynga/uninett/data/honefoss-mp.usn.no/2020-09-23/uninett-events-00:00:07.log gap_list=1409\n", + "2980: /dynga/uninett/data/honefoss-mp.usn.no/2020-08-01/uninett-events-00:00:18.log gap_list=1414\n", + "3000: /dynga/uninett/data/honefoss-mp.usn.no/2020-08-08/uninett-events-00:00:17.log gap_list=1415\n", + "3020: /dynga/uninett/data/honefoss-mp.usn.no/2020-08-04/uninett-events-00:00:17.log gap_list=1417\n", + "3040: /dynga/uninett/data/honefoss-mp.usn.no/2020-07-24/uninett-events-00:00:17.log gap_list=1418\n", + "3060: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2021-02-28/uninett-events-00:00:07.log gap_list=1421\n", + "3080: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2021-02-08/uninett-events-00:00:07.log gap_list=1422\n", + "3100: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2021-01-19/uninett-events-00:00:07.log gap_list=1422\n", + "3120: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-12-31/uninett-events-00:00:07.log gap_list=1422\n", + "3140: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-12-12/uninett-events-00:00:08.log gap_list=1423\n", + "3160: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-11-22/uninett-events-00:00:07.log gap_list=1424\n", + "3180: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-11-03/uninett-events-00:00:07.log gap_list=1424\n", + "3200: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-10-14/uninett-events-00:00:08.log gap_list=1424\n", + "3220: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-09-24/uninett-events-00:00:07.log gap_list=1429\n", + "3240: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-08-28/uninett-events-00:00:18.log gap_list=1434\n", + "3260: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-07-21/uninett-events-00:00:17.log gap_list=1437\n", + "3280: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-08-16/uninett-events-00:00:17.log gap_list=1439\n", + "3300: /dynga/uninett/data/kunnskapsv-mp.oslomet.no/2020-08-14/uninett-events-00:00:18.log gap_list=1441\n", + "3320: /dynga/uninett/data/unitosl-mp.c.uninett.no/2021-03-01/mp-sync-events.log gap_list=1446\n", + "3340: /dynga/uninett/data/unitosl-mp.c.uninett.no/2021-02-09/uninett-events-00:00:07.log gap_list=1447\n", + "3360: /dynga/uninett/data/unitosl-mp.c.uninett.no/2021-01-20/uninett-events-00:00:07.log gap_list=1447\n", + "3380: /dynga/uninett/data/unitosl-mp.c.uninett.no/2021-01-01/uninett-events-00:00:07.log gap_list=1447\n", + "3400: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-12-13/uninett-events-00:00:07.log gap_list=1448\n", + "3420: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-11-23/uninett-events-00:00:07.log gap_list=1453\n", + "3440: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-11-03/uninett-events-10:03:08.log gap_list=1459\n", + "3460: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-10-15/uninett-events-00:00:07.log gap_list=1461\n", + "3480: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-09-25/uninett-events-00:00:07.log gap_list=1464\n", + "3500: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-09-06/uninett-events-00:00:17.log gap_list=1469\n", + "3520: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-08-24/uninett-events-00:00:17.log gap_list=1471\n", + "3540: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-07-04/uninett-events-00:00:17.log gap_list=1474\n", + "3560: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-06-30/uninett-events-00:00:17.log gap_list=1478\n", + "3580: /dynga/uninett/data/unitosl-mp.c.uninett.no/2020-07-27/uninett-events-00:00:17.log gap_list=1478\n", + "3600: /dynga/uninett/data/kongsberg-mp.usn.no/2021-02-26/uninett-events-00:00:07.log gap_list=1481\n", + "3620: /dynga/uninett/data/kongsberg-mp.usn.no/2021-02-06/uninett-events-00:00:07.log gap_list=1481\n", + "3640: /dynga/uninett/data/kongsberg-mp.usn.no/2021-01-18/uninett-events-00:00:07.log gap_list=1484\n", + "3660: /dynga/uninett/data/kongsberg-mp.usn.no/2020-12-29/uninett-events-00:00:07.log gap_list=1484\n", + "3680: /dynga/uninett/data/kongsberg-mp.usn.no/2020-12-10/uninett-events-00:00:07.log gap_list=1489\n", + "3700: /dynga/uninett/data/kongsberg-mp.usn.no/2020-11-20/uninett-events-00:00:07.log gap_list=1494\n", + "3720: /dynga/uninett/data/kongsberg-mp.usn.no/2020-11-01/uninett-events-00:00:07.log gap_list=1495\n", + "3740: /dynga/uninett/data/kongsberg-mp.usn.no/2020-10-12/uninett-events-00:00:07.log gap_list=1497\n", + "3760: /dynga/uninett/data/kongsberg-mp.usn.no/2020-09-22/uninett-events-00:00:07.log gap_list=1502\n", + "3780: /dynga/uninett/data/kongsberg-mp.usn.no/2020-08-27/uninett-events-00:00:17.log gap_list=1504\n", + "3800: /dynga/uninett/data/kongsberg-mp.usn.no/2020-08-18/uninett-events-00:00:17.log gap_list=1505\n", + "3820: /dynga/uninett/data/kongsberg-mp.usn.no/2020-08-11/uninett-events-00:00:17.log gap_list=1506\n", + "3840: /dynga/uninett/data/kongsberg-mp.usn.no/2020-07-09/uninett-events-00:00:17.log gap_list=1506\n", + "3860: /dynga/uninett/data/hoytek-mp.uib.no/2021-02-27/uninett-events-00:00:07.log gap_list=1507\n", + "3880: /dynga/uninett/data/hoytek-mp.uib.no/2021-02-07/uninett-events-00:00:07.log gap_list=1511\n", + "3900: /dynga/uninett/data/hoytek-mp.uib.no/2021-01-18/uninett-events-00:00:07.log gap_list=1514\n", + "3920: /dynga/uninett/data/hoytek-mp.uib.no/2021-01-03/uninett-events-00:00:07.log gap_list=1518\n", + "3940: /dynga/uninett/data/hoytek-mp.uib.no/2020-12-15/uninett-events-00:00:07.log gap_list=1520\n", + "3960: /dynga/uninett/data/hoytek-mp.uib.no/2020-11-25/uninett-events-00:00:07.log gap_list=1523\n", + "3980: /dynga/uninett/data/hoytek-mp.uib.no/2020-11-05/uninett-events-00:00:07.log gap_list=1527\n", + "4000: /dynga/uninett/data/hoytek-mp.uib.no/2020-10-17/uninett-events-00:00:07.log gap_list=1533\n", + "4020: /dynga/uninett/data/hoytek-mp.uib.no/2020-09-27/uninett-events-00:00:07.log gap_list=1540\n", + "4040: /dynga/uninett/data/hoytek-mp.uib.no/2020-09-07/uninett-events-00:00:17.log gap_list=1541\n", + "4060: /dynga/uninett/data/hoytek-mp.uib.no/2020-08-22/uninett-events-00:00:17.log gap_list=1543\n", + "4080: /dynga/uninett/data/hoytek-mp.uib.no/2020-07-07/uninett-events-00:00:17.log gap_list=1544\n", + "4100: /dynga/uninett/data/hoytek-mp.uib.no/2020-08-11/uninett-events-10:03:08.log gap_list=1545\n", + "4120: /dynga/uninett/data/cmi-mp.cmi.no/2021-03-02/uninett-events-00:00:07.log gap_list=1549\n", + "4140: /dynga/uninett/data/cmi-mp.cmi.no/2021-02-12/uninett-events-00:00:07.log gap_list=1549\n", + "4160: /dynga/uninett/data/cmi-mp.cmi.no/2021-01-23/uninett-events-00:00:07.log gap_list=1553\n", + "4180: /dynga/uninett/data/cmi-mp.cmi.no/2021-01-04/uninett-events-00:00:07.log gap_list=1554\n", + "4200: /dynga/uninett/data/cmi-mp.cmi.no/2020-12-16/uninett-events-00:00:07.log gap_list=1556\n", + "4220: /dynga/uninett/data/cmi-mp.cmi.no/2020-11-26/uninett-events-00:00:08.log gap_list=1558\n", + "4240: /dynga/uninett/data/cmi-mp.cmi.no/2020-11-06/uninett-events-00:00:07.log gap_list=1561\n", + "4260: /dynga/uninett/data/cmi-mp.cmi.no/2020-10-18/uninett-events-00:00:07.log gap_list=1563\n", + "4280: /dynga/uninett/data/cmi-mp.cmi.no/2020-09-28/uninett-events-00:00:07.log gap_list=1570\n", + "4300: /dynga/uninett/data/cmi-mp.cmi.no/2020-09-09/uninett-events-00:00:17.log gap_list=1571\n", + "4320: /dynga/uninett/data/cmi-mp.cmi.no/2020-06-25/uninett-events-00:00:17.log gap_list=1573\n", + "4340: /dynga/uninett/data/cmi-mp.cmi.no/2020-09-04/uninett-events-00:00:17.log gap_list=1575\n", + "4360: /dynga/uninett/data/cmi-mp.cmi.no/2020-07-19/uninett-events-00:00:17.log gap_list=1580\n", + "4380: /dynga/uninett/data/ytelse-brg.uninett.no/2021-03-03/mp-sync-events.log gap_list=1587\n", + "4400: /dynga/uninett/data/ytelse-brg.uninett.no/2021-02-17/uninett-events-00:00:07.log gap_list=1632\n", + "4420: /dynga/uninett/data/ytelse-brg.uninett.no/2021-01-29/uninett-events-00:00:08.log gap_list=1683\n", + "4440: /dynga/uninett/data/ytelse-brg.uninett.no/2021-01-10/uninett-events-00:00:07.log gap_list=1834\n", + "4460: /dynga/uninett/data/ytelse-brg.uninett.no/2020-12-21/uninett-events-00:00:07.log gap_list=1858\n", + "4480: /dynga/uninett/data/ytelse-brg.uninett.no/2020-12-02/uninett-events-00:00:07.log gap_list=1945\n", + "Computing label assignment and total inertia\n", + "silhouette score: 0.9686540699214121\n" + ] + } + ], + "source": [ + "from sklearn.cluster import MiniBatchKMeans\n", + "from sklearn.feature_extraction import DictVectorizer\n", + "\n", + "\n", + "FEATURES = ['tloss', 'h_slope_10']\n", + "\n", + "v = DictVectorizer(sparse=False)\n", + "v.fit( [{key:0 for key in FEATURES}] )\n", + "\n", + "CLUSTERS = 3\n", + "BATCH_SIZE = 2000\n", + "gap_buffer = []\n", + "root_path = pathlib.Path(\"/dynga/uninett/data/\")\n", + "\n", + "kmeans = MiniBatchKMeans(verbose=1, batch_size=BATCH_SIZE)\n", + "\n", + "def file_handler(i:int, path: pathlib.Path) -> bool:\n", + " \n", + "loop0_done = False\n", + "for i, path in enumerate(root_path.rglob(pattern=\"**/*event*.log\"), 1):\n", + " \n", + " if loop0_done:\n", + " break\n", + " \n", + " # if len(gap_list) > 20000:\n", + " #break\n", + " \n", + " if (i % 20) == 0:\n", + " print(f\"{i}: {path} gap_list={len(gap_list)}\")\n", + " \n", + " if i > 400000:\n", + " break\n", + " \n", + " with path.open() as f:\n", + " for j, line in enumerate(f, 1):\n", + " \n", + " #if (j % 10000) == 0:\n", + " # print(f\"\\t{j}: {None}\")\n", + " \n", + " if '\"gap\"' in line:\n", + " try:\n", + " gap_buffer.append(json.loads(line))\n", + " except:\n", + " pass\n", + " \n", + " if len(gap_buffer) >= BATCH_SIZE:\n", + " # print(f\"file {i}, line {j} gap_list has been reset\")\n", + "\n", + " # feature extraction / normalization / scaling / vectorization\n", + " gaps_prepared = v.transform({key:record[key] for key in FEATURES} for record in gap_buffer)\n", + "\n", + " # partial_fit(gaps_prepared)\n", + " kmeans.partial_fit(X=gaps_prepared)\n", + " \n", + " ss = sklearn.metrics.silhouette_score(X=gaps_prepared, labels=kmeans.predict(gaps_prepared))\n", + " print(f\"silhouette score: {ss}\")\n", + "\n", + " gap_buffer = []\n", + " loop0_done = True\n", + "\n", + "\n", + "# print(len(gap_list))\n", + "# print(gap_list[:3])" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "prospective-cherry", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2000\n" + ] + } + ], + "source": [ + "print(len(gap_list))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "described-yorkshire", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/scripts/microdep_types.py b/django_wrapper/scripts/microdep_types.py similarity index 100% rename from scripts/microdep_types.py rename to django_wrapper/scripts/microdep_types.py diff --git a/scripts/read_gz.py b/django_wrapper/scripts/read_gz.py similarity index 100% rename from scripts/read_gz.py rename to django_wrapper/scripts/read_gz.py diff --git a/scripts/utils.py b/django_wrapper/scripts/utils.py similarity index 100% rename from scripts/utils.py rename to django_wrapper/scripts/utils.py diff --git a/scripts/__init__.py b/scripts/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/crude_parser_old.py b/scripts/crude_parser_old.py deleted file mode 100644 index 23670b0..0000000 --- a/scripts/crude_parser_old.py +++ /dev/null @@ -1,53 +0,0 @@ -# imports -import gzip - -import microdep_types -import utils -# End: imports ----------------------------------------------------------------- - - -crude_fred = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/crude-00_00_01.gz' -# traceroute = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/traceroute_128.39.19.150.gz' -# tcptraceroute = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/tcptraceroute_128.39.19.150.gz' -# vmstat = 'C:/Users/twide/my_projects/git/ml-microdep/secret/fredrikstad-mp.hiof.no/2021-02-07/vmstat.gz' -tekno_crude = 'C:/Users/twide/my_projects/git/ml-microdep/secret/teknobyen-mp.uninett.no/2021-02-07/crude-00_00_02.gz' -# traceroute2 = 'C:/Users/twide/my_projects/git/ml-microdep/secret/teknobyen-mp.uninett.no/2021-02-07/traceroute_128.39.19.150.gz' -# tcptraceroute2 = 'C:/Users/twide/my_projects/git/ml-microdep/secret/teknobyen-mp.uninett.no/2021-02-07/tcptraceroute_128.39.19.150.gz' -# vmstat2 = 'C:/Users/twide/my_projects/git/ml-microdep/secret/teknobyen-mp.uninett.no/2021-02-07/vmstat.gz' - -ca = utils.CrudeAnalyzer2(window_size=5) - -with gzip.open(filename=crude_fred, mode='rt') as file: - [file.readline() for i in range(4)] # discard headerlines - - for i, line in enumerate(file): - line = line.strip() - - if i % 1000000 == 0: - print(f"{i}: {line}") - - print(line) - if i > 20: - break - - key_values = line.split() # list of key-value pairs # ['ID=1', 'RX=15434', ...] - - try: - record = microdep_types.CrudeRecord( - id = key_values[0].split('=')[1], # ID=1 - seq = key_values[1].split('=')[1], - src = key_values[2].split('=')[1].split(':')[0], # SRC=ip:port - dst = key_values[3].split('=')[1].split(':')[0], # DST=ip:port - tx = key_values[4].split('=')[1], - rx = key_values[5].split('=')[1], - size = key_values[6].split('=')[1], - hoplimit = key_values[7].split('=')[1], - ) - ca.add_record(record) - # print(record.__dict__) - - except Exception as e: - print(f"{i}: {line.strip()}, [{e}]") - -print(ca) -print(ca.stats)