assemblyline-core 4.7.5.dev109__tar.gz → 4.7.5.dev110__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/PKG-INFO +1 -1
  2. assemblyline_core-4.7.5.dev110/assemblyline_core/VERSION +1 -0
  3. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +18 -23
  4. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core.egg-info/PKG-INFO +1 -1
  5. assemblyline_core-4.7.5.dev109/assemblyline_core/VERSION +0 -1
  6. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/LICENCE.md +0 -0
  7. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/README.md +0 -0
  8. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/__init__.py +0 -0
  9. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/alerter/__init__.py +0 -0
  10. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/alerter/processing.py +0 -0
  11. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/alerter/run_alerter.py +0 -0
  12. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/archiver/__init__.py +0 -0
  13. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/archiver/run_archiver.py +0 -0
  14. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/badlist_client.py +0 -0
  15. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/dispatching/__init__.py +0 -0
  16. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/dispatching/client.py +0 -0
  17. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/dispatching/dispatcher.py +0 -0
  18. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/dispatching/schedules.py +0 -0
  19. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/expiry/__init__.py +0 -0
  20. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/expiry/run_expiry.py +0 -0
  21. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/ingester/__init__.py +0 -0
  22. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/ingester/constants.py +0 -0
  23. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/ingester/ingester.py +0 -0
  24. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/metrics/__init__.py +0 -0
  25. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/metrics/es_metrics.py +0 -0
  26. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
  27. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/metrics/helper.py +0 -0
  28. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/metrics/metrics_server.py +0 -0
  29. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
  30. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
  31. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
  32. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/replay/__init__.py +0 -0
  33. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/replay/client.py +0 -0
  34. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/replay/creator/__init__.py +0 -0
  35. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/replay/creator/run.py +0 -0
  36. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/replay/creator/run_worker.py +0 -0
  37. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/replay/loader/__init__.py +0 -0
  38. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/replay/loader/run.py +0 -0
  39. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/replay/loader/run_worker.py +0 -0
  40. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/replay/replay.py +0 -0
  41. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/safelist_client.py +0 -0
  42. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/scaler/__init__.py +0 -0
  43. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/scaler/collection.py +0 -0
  44. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/scaler/controllers/__init__.py +0 -0
  45. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/scaler/controllers/docker_ctl.py +0 -0
  46. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/scaler/controllers/interface.py +0 -0
  47. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/scaler/run_scaler.py +0 -0
  48. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/scaler/scaler_server.py +0 -0
  49. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/server_base.py +0 -0
  50. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/signature_client.py +0 -0
  51. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/submission_client.py +0 -0
  52. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/tasking_client.py +0 -0
  53. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/updater/__init__.py +0 -0
  54. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/updater/helper.py +0 -0
  55. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/updater/run_updater.py +0 -0
  56. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/vacuum/__init__.py +0 -0
  57. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/vacuum/crawler.py +0 -0
  58. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/vacuum/department_map.py +0 -0
  59. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/vacuum/safelist.py +0 -0
  60. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/vacuum/stream_map.py +0 -0
  61. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/vacuum/worker.py +0 -0
  62. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/workflow/__init__.py +0 -0
  63. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core/workflow/run_workflow.py +0 -0
  64. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core.egg-info/SOURCES.txt +0 -0
  65. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core.egg-info/dependency_links.txt +0 -0
  66. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core.egg-info/requires.txt +0 -0
  67. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/assemblyline_core.egg-info/top_level.txt +0 -0
  68. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/setup.cfg +0 -0
  69. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/setup.py +0 -0
  70. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_alerter.py +0 -0
  71. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_badlist_client.py +0 -0
  72. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_expiry.py +0 -0
  73. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_replay.py +0 -0
  74. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_safelist_client.py +0 -0
  75. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_scaler.py +0 -0
  76. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_scheduler.py +0 -0
  77. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_signature_client.py +0 -0
  78. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_tasking_client.py +0 -0
  79. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_updater_helper.py +0 -0
  80. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_vacuum.py +0 -0
  81. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev110}/test/test_workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline-core
3
- Version: 4.7.5.dev109
3
+ Version: 4.7.5.dev110
4
4
  Summary: Assemblyline 4 - Core components
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-core/
6
6
  Author: CCCS Assemblyline development team
@@ -0,0 +1 @@
1
+ 4.7.5.dev110
@@ -24,7 +24,8 @@ from cryptography import x509
24
24
  from cryptography.hazmat.primitives import hashes, serialization
25
25
  from cryptography.hazmat.primitives.asymmetric import rsa
26
26
  from dateutil.tz import tzlocal
27
- from kubernetes import client, config, watch
27
+ from kubernetes import client, config
28
+ from kubernetes.watch import Watch
28
29
  from kubernetes.client import (
29
30
  V1Affinity,
30
31
  V1Capabilities,
@@ -74,8 +75,6 @@ from assemblyline_core.scaler.controllers.interface import ControllerInterface
74
75
  # RESERVE_MEMORY_PER_NODE = os.environ.get('RESERVE_MEMORY_PER_NODE')
75
76
 
76
77
  API_TIMEOUT = 90
77
- WATCH_TIMEOUT = 10 * 60
78
- WATCH_API_TIMEOUT = WATCH_TIMEOUT + 10
79
78
  CHANGE_KEY_NAME = 'al_change_key'
80
79
  DEV_MODE = os.environ.get('DEV_MODE', 'false').lower() == 'true'
81
80
  CONTAINER_RESTART_THRESHOLD = int(os.environ.get('CONTAINER_RESTART_THRESHOLD', 1))
@@ -92,6 +91,9 @@ RESTRICTED_POD_SECURITY_CONTEXT = V1SecurityContext(
92
91
  allow_privilege_escalation=False,
93
92
  seccomp_profile=V1SeccompProfile(type="RuntimeDefault")
94
93
  )
94
+ WATCH_ARGS: dict[str, bool | str] = {
95
+ 'allow_watch_bookmarks': True,
96
+ }
95
97
 
96
98
  AL_ROOT_CA = os.environ.get('AL_ROOT_CA', '/etc/assemblyline/ssl/al_root-ca.crt')
97
99
  AL_ROOT_CA_PK = os.environ.get('AL_ROOT_CA_PK', '/etc/assemblyline/ssl/al_root-ca.key')
@@ -134,13 +136,6 @@ class CacheDict(OrderedDict):
134
136
  return val
135
137
 
136
138
 
137
- class TypelessWatch(watch.Watch):
138
- """A kubernetes watch object that doesn't marshal the response."""
139
-
140
- def get_return_type(self, func):
141
- return None
142
-
143
-
144
139
  def median(values: list[float]) -> float:
145
140
  if len(values) == 0:
146
141
  return 0
@@ -468,13 +463,12 @@ class KubernetesController(ControllerInterface):
468
463
  self._node_pool_max_cpu = 0
469
464
  self._node_pool_max_ram = 0
470
465
  self.node_count = 0
471
- watch = TypelessWatch()
466
+ watch = Watch()
472
467
  self.ready_nodes: dict[str, tuple[float, float]] = {}
473
468
  field_selector, label_selector = selector_to_list_filters(self.linux_node_selector)
474
469
 
475
- for event in watch.stream(func=self.api.list_node, timeout_seconds=WATCH_TIMEOUT,
476
- field_selector=field_selector, label_selector=label_selector,
477
- _request_timeout=WATCH_API_TIMEOUT):
470
+ for event in watch.stream(func=self.api.list_node, field_selector=field_selector,
471
+ label_selector=label_selector, **WATCH_ARGS):
478
472
  if not self.running:
479
473
  break
480
474
 
@@ -510,7 +504,7 @@ class KubernetesController(ControllerInterface):
510
504
  self._node_pool_max_ram = max_ram
511
505
 
512
506
  def _monitor_pods(self):
513
- watch = TypelessWatch()
507
+ watch = Watch()
514
508
  log_cache = CacheDict(cache_len=8000)
515
509
  per_node_containers: dict[str, dict[str, tuple[float, float]]] = defaultdict(dict)
516
510
  per_node_namespaced_containers: dict[str, dict[str, tuple[float, float]]] = defaultdict(dict)
@@ -519,15 +513,14 @@ class KubernetesController(ControllerInterface):
519
513
  self._pod_used_namespace_cpu = defaultdict(float)
520
514
  self._pod_used_namespace_ram = defaultdict(float)
521
515
 
516
+ kwargs = dict(WATCH_ARGS)
522
517
  if self.cluster_pod_list:
523
518
  list_pods = self.api.list_pod_for_all_namespaces
524
- kwargs = dict()
525
519
  else:
526
520
  list_pods = self.api.list_namespaced_pod
527
- kwargs = dict(namespace=self.namespace)
521
+ kwargs['namespace'] = self.namespace
528
522
 
529
- for event in watch.stream(func=list_pods, timeout_seconds=WATCH_TIMEOUT,
530
- _request_timeout=WATCH_API_TIMEOUT, **kwargs):
523
+ for event in watch.stream(func=list_pods, **kwargs):
531
524
  if not self.running:
532
525
  break
533
526
 
@@ -588,7 +581,7 @@ class KubernetesController(ControllerInterface):
588
581
  self._pod_used_namespace_ram[node] = sum(memory_used) + memory_unrestricted * mean(memory_used)
589
582
 
590
583
  def _monitor_quotas(self):
591
- watch = TypelessWatch()
584
+ watch = Watch()
592
585
  cpu_limits = {}
593
586
  cpu_used = {}
594
587
  mem_limits = {}
@@ -600,9 +593,11 @@ class KubernetesController(ControllerInterface):
600
593
  self._quota_mem_used = None
601
594
 
602
595
  for event in watch.stream(func=self.api.list_namespaced_resource_quota, namespace=self.namespace,
603
- timeout_seconds=WATCH_TIMEOUT, _request_timeout=WATCH_API_TIMEOUT):
596
+ **WATCH_ARGS):
604
597
  if not self.running:
605
598
  break
599
+ if not isinstance(event, dict):
600
+ continue
606
601
 
607
602
  name = event['raw_object']['metadata']['name']
608
603
  if 'scope_selector' in event['raw_object']['spec'] or 'scopes' in event['raw_object']['spec']:
@@ -668,7 +663,7 @@ class KubernetesController(ControllerInterface):
668
663
  self._quota_mem_used = None
669
664
 
670
665
  def _monitor_deployments(self):
671
- watch = TypelessWatch()
666
+ watch = Watch()
672
667
 
673
668
  self._deployment_targets = {}
674
669
  self._deployment_unavailable = {}
@@ -676,7 +671,7 @@ class KubernetesController(ControllerInterface):
676
671
 
677
672
  for event in watch.stream(func=self.apps_api.list_namespaced_deployment,
678
673
  namespace=self.namespace, label_selector=label_selector,
679
- timeout_seconds=WATCH_TIMEOUT, _request_timeout=WATCH_API_TIMEOUT):
674
+ **WATCH_ARGS):
680
675
  if 'dependency_for' in event['raw_object']['metadata']['labels']:
681
676
  continue
682
677
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline-core
3
- Version: 4.7.5.dev109
3
+ Version: 4.7.5.dev110
4
4
  Summary: Assemblyline 4 - Core components
5
5
  Home-page: https://github.com/CybercentreCanada/assemblyline-core/
6
6
  Author: CCCS Assemblyline development team
@@ -1 +0,0 @@
1
- 4.7.5.dev109