From 5137572127bb91d5f33d57918c62676304663578 Mon Sep 17 00:00:00 2001
From: mipel <hadunan@gmail.com>
Date: Thu, 19 Aug 2021 14:29:18 +0200
Subject: [PATCH] Identifier generating command

* adds a test command for calculating the collision rate for e.g. an intervention (Not important for production or anything)
---
 .../commands/test_identifier_generating.py    | 51 +++++++++++++++++++
 1 file changed, 51 insertions(+)
 create mode 100644 konova/management/commands/test_identifier_generating.py

diff --git a/konova/management/commands/test_identifier_generating.py b/konova/management/commands/test_identifier_generating.py
new file mode 100644
index 00000000..73088b22
--- /dev/null
+++ b/konova/management/commands/test_identifier_generating.py
@@ -0,0 +1,51 @@
+"""
+Author: Michel Peltriaux
+Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
+Contact: michel.peltriaux@sgdnord.rlp.de
+Created on: 19.08.21
+
+"""
+from django.core.management import BaseCommand
+
+from intervention.models import Intervention
+
+
+class Command(BaseCommand):
+    help = "Performs test on collisions using the identifier generation"
+
+    def handle(self, *args, **options):
+        identifiers = {}
+        max_iterations = 100000
+        try:
+            collisions = 0
+            len_ids = len(identifiers)
+            while len_ids < max_iterations:
+                tmp_intervention = Intervention()
+                _id = tmp_intervention._generate_new_identifier()
+                len_ids = len(identifiers)
+                if _id not in identifiers:
+                    if len_ids % (max_iterations/5) == 0:
+                        print(len_ids)
+                    identifiers[_id] = None
+                else:
+                    collisions += 1
+                    print("+++ Collision after {} identifiers +++".format(len_ids))
+
+        except KeyboardInterrupt:
+            self._break_line()
+            exit(-1)
+        print(
+            "\n{} collisions in {} identifiers; Collision rate {}%".format(
+                collisions,
+                len_ids,
+                (collisions / len_ids)*100,
+            )
+        )
+
+    def _break_line(self):
+        """ Simply prints a line break
+
+        Returns:
+
+        """
+        self.stdout.write("\n")
\ No newline at end of file