assemblyline-core 4.7.5.dev109__tar.gz → 4.7.5.dev111__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.dev111}/PKG-INFO +1 -1
  2. assemblyline_core-4.7.5.dev111/assemblyline_core/VERSION +1 -0
  3. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +27 -23
  4. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/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.dev111}/LICENCE.md +0 -0
  7. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/README.md +0 -0
  8. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/__init__.py +0 -0
  9. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/alerter/__init__.py +0 -0
  10. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/alerter/processing.py +0 -0
  11. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/alerter/run_alerter.py +0 -0
  12. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/archiver/__init__.py +0 -0
  13. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/archiver/run_archiver.py +0 -0
  14. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/badlist_client.py +0 -0
  15. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/dispatching/__init__.py +0 -0
  16. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/dispatching/client.py +0 -0
  17. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/dispatching/dispatcher.py +0 -0
  18. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/dispatching/schedules.py +0 -0
  19. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/expiry/__init__.py +0 -0
  20. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/expiry/run_expiry.py +0 -0
  21. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/ingester/__init__.py +0 -0
  22. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/ingester/constants.py +0 -0
  23. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/ingester/ingester.py +0 -0
  24. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/metrics/__init__.py +0 -0
  25. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/metrics/es_metrics.py +0 -0
  26. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
  27. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/metrics/helper.py +0 -0
  28. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/metrics/metrics_server.py +0 -0
  29. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
  30. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
  31. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
  32. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/replay/__init__.py +0 -0
  33. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/replay/client.py +0 -0
  34. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/replay/creator/__init__.py +0 -0
  35. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/replay/creator/run.py +0 -0
  36. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/replay/creator/run_worker.py +0 -0
  37. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/replay/loader/__init__.py +0 -0
  38. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/replay/loader/run.py +0 -0
  39. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/replay/loader/run_worker.py +0 -0
  40. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/replay/replay.py +0 -0
  41. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/safelist_client.py +0 -0
  42. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/scaler/__init__.py +0 -0
  43. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/scaler/collection.py +0 -0
  44. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/scaler/controllers/__init__.py +0 -0
  45. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/scaler/controllers/docker_ctl.py +0 -0
  46. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/scaler/controllers/interface.py +0 -0
  47. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/scaler/run_scaler.py +0 -0
  48. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/scaler/scaler_server.py +0 -0
  49. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/server_base.py +0 -0
  50. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/signature_client.py +0 -0
  51. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/submission_client.py +0 -0
  52. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/tasking_client.py +0 -0
  53. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/updater/__init__.py +0 -0
  54. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/updater/helper.py +0 -0
  55. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/updater/run_updater.py +0 -0
  56. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/vacuum/__init__.py +0 -0
  57. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/vacuum/crawler.py +0 -0
  58. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/vacuum/department_map.py +0 -0
  59. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/vacuum/safelist.py +0 -0
  60. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/vacuum/stream_map.py +0 -0
  61. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/vacuum/worker.py +0 -0
  62. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/workflow/__init__.py +0 -0
  63. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core/workflow/run_workflow.py +0 -0
  64. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core.egg-info/SOURCES.txt +0 -0
  65. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core.egg-info/dependency_links.txt +0 -0
  66. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core.egg-info/requires.txt +0 -0
  67. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/assemblyline_core.egg-info/top_level.txt +0 -0
  68. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/setup.cfg +0 -0
  69. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/setup.py +0 -0
  70. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/test/test_alerter.py +0 -0
  71. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/test/test_badlist_client.py +0 -0
  72. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/test/test_expiry.py +0 -0
  73. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/test/test_replay.py +0 -0
  74. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/test/test_safelist_client.py +0 -0
  75. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/test/test_scaler.py +0 -0
  76. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/test/test_scheduler.py +0 -0
  77. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/test/test_signature_client.py +0 -0
  78. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/test/test_tasking_client.py +0 -0
  79. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/test/test_updater_helper.py +0 -0
  80. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/test/test_vacuum.py +0 -0
  81. {assemblyline_core-4.7.5.dev109 → assemblyline_core-4.7.5.dev111}/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.dev111
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.dev111
@@ -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,15 +463,16 @@ 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
474
+ if not isinstance(event, dict) or event['type'] == 'BOOKMARK':
475
+ continue
480
476
 
481
477
  name: str = event['raw_object']['metadata']['name']
482
478
 
@@ -510,7 +506,7 @@ class KubernetesController(ControllerInterface):
510
506
  self._node_pool_max_ram = max_ram
511
507
 
512
508
  def _monitor_pods(self):
513
- watch = TypelessWatch()
509
+ watch = Watch()
514
510
  log_cache = CacheDict(cache_len=8000)
515
511
  per_node_containers: dict[str, dict[str, tuple[float, float]]] = defaultdict(dict)
516
512
  per_node_namespaced_containers: dict[str, dict[str, tuple[float, float]]] = defaultdict(dict)
@@ -519,17 +515,18 @@ class KubernetesController(ControllerInterface):
519
515
  self._pod_used_namespace_cpu = defaultdict(float)
520
516
  self._pod_used_namespace_ram = defaultdict(float)
521
517
 
518
+ kwargs = dict(WATCH_ARGS)
522
519
  if self.cluster_pod_list:
523
520
  list_pods = self.api.list_pod_for_all_namespaces
524
- kwargs = dict()
525
521
  else:
526
522
  list_pods = self.api.list_namespaced_pod
527
- kwargs = dict(namespace=self.namespace)
523
+ kwargs['namespace'] = self.namespace
528
524
 
529
- for event in watch.stream(func=list_pods, timeout_seconds=WATCH_TIMEOUT,
530
- _request_timeout=WATCH_API_TIMEOUT, **kwargs):
525
+ for event in watch.stream(func=list_pods, **kwargs):
531
526
  if not self.running:
532
527
  break
528
+ if not isinstance(event, dict) or event['type'] == 'BOOKMARK':
529
+ continue
533
530
 
534
531
  pod_name = "Unknown Pod"
535
532
  try:
@@ -588,7 +585,7 @@ class KubernetesController(ControllerInterface):
588
585
  self._pod_used_namespace_ram[node] = sum(memory_used) + memory_unrestricted * mean(memory_used)
589
586
 
590
587
  def _monitor_quotas(self):
591
- watch = TypelessWatch()
588
+ watch = Watch()
592
589
  cpu_limits = {}
593
590
  cpu_used = {}
594
591
  mem_limits = {}
@@ -600,9 +597,11 @@ class KubernetesController(ControllerInterface):
600
597
  self._quota_mem_used = None
601
598
 
602
599
  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):
600
+ **WATCH_ARGS):
604
601
  if not self.running:
605
602
  break
603
+ if not isinstance(event, dict) or event['type'] == 'BOOKMARK':
604
+ continue
606
605
 
607
606
  name = event['raw_object']['metadata']['name']
608
607
  if 'scope_selector' in event['raw_object']['spec'] or 'scopes' in event['raw_object']['spec']:
@@ -668,7 +667,7 @@ class KubernetesController(ControllerInterface):
668
667
  self._quota_mem_used = None
669
668
 
670
669
  def _monitor_deployments(self):
671
- watch = TypelessWatch()
670
+ watch = Watch()
672
671
 
673
672
  self._deployment_targets = {}
674
673
  self._deployment_unavailable = {}
@@ -676,7 +675,12 @@ class KubernetesController(ControllerInterface):
676
675
 
677
676
  for event in watch.stream(func=self.apps_api.list_namespaced_deployment,
678
677
  namespace=self.namespace, label_selector=label_selector,
679
- timeout_seconds=WATCH_TIMEOUT, _request_timeout=WATCH_API_TIMEOUT):
678
+ **WATCH_ARGS):
679
+ if not self.running:
680
+ break
681
+ if not isinstance(event, dict) or event['type'] == 'BOOKMARK':
682
+ continue
683
+
680
684
  if 'dependency_for' in event['raw_object']['metadata']['labels']:
681
685
  continue
682
686
 
@@ -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.dev111
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