assemblyline-core 4.7.2.dev2__tar.gz → 4.7.2.dev5__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 (80) hide show
  1. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/PKG-INFO +1 -1
  2. assemblyline_core-4.7.2.dev5/assemblyline_core/VERSION +1 -0
  3. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/metrics_server.py +45 -42
  4. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/updater/helper.py +13 -1
  5. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core.egg-info/PKG-INFO +1 -1
  6. assemblyline_core-4.7.2.dev2/assemblyline_core/VERSION +0 -1
  7. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/LICENCE.md +0 -0
  8. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/README.md +0 -0
  9. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/__init__.py +0 -0
  10. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/alerter/__init__.py +0 -0
  11. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/alerter/processing.py +0 -0
  12. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/alerter/run_alerter.py +0 -0
  13. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/archiver/__init__.py +0 -0
  14. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/archiver/run_archiver.py +0 -0
  15. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/badlist_client.py +0 -0
  16. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/dispatching/__init__.py +0 -0
  17. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/dispatching/client.py +0 -0
  18. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/dispatching/dispatcher.py +0 -0
  19. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/dispatching/schedules.py +0 -0
  20. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/expiry/__init__.py +0 -0
  21. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/expiry/run_expiry.py +0 -0
  22. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/ingester/__init__.py +0 -0
  23. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/ingester/constants.py +0 -0
  24. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/ingester/ingester.py +0 -0
  25. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/__init__.py +0 -0
  26. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/es_metrics.py +0 -0
  27. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
  28. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/helper.py +0 -0
  29. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
  30. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
  31. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
  32. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/__init__.py +0 -0
  33. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/client.py +0 -0
  34. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/creator/__init__.py +0 -0
  35. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/creator/run.py +0 -0
  36. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/creator/run_worker.py +0 -0
  37. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/loader/__init__.py +0 -0
  38. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/loader/run.py +0 -0
  39. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/loader/run_worker.py +0 -0
  40. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/replay.py +0 -0
  41. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/safelist_client.py +0 -0
  42. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/__init__.py +0 -0
  43. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/collection.py +0 -0
  44. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/controllers/__init__.py +0 -0
  45. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/controllers/docker_ctl.py +0 -0
  46. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/controllers/interface.py +0 -0
  47. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +0 -0
  48. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/run_scaler.py +0 -0
  49. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/scaler_server.py +0 -0
  50. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/server_base.py +0 -0
  51. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/signature_client.py +0 -0
  52. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/submission_client.py +0 -0
  53. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/tasking_client.py +0 -0
  54. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/updater/__init__.py +0 -0
  55. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/updater/run_updater.py +0 -0
  56. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/__init__.py +0 -0
  57. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/crawler.py +0 -0
  58. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/department_map.py +0 -0
  59. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/safelist.py +0 -0
  60. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/stream_map.py +0 -0
  61. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/worker.py +0 -0
  62. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/workflow/__init__.py +0 -0
  63. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/workflow/run_workflow.py +0 -0
  64. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core.egg-info/SOURCES.txt +0 -0
  65. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core.egg-info/dependency_links.txt +0 -0
  66. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core.egg-info/requires.txt +0 -0
  67. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core.egg-info/top_level.txt +0 -0
  68. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/setup.cfg +0 -0
  69. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/setup.py +0 -0
  70. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_alerter.py +0 -0
  71. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_badlist_client.py +0 -0
  72. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_expiry.py +0 -0
  73. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_replay.py +0 -0
  74. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_safelist_client.py +0 -0
  75. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_scaler.py +0 -0
  76. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_scheduler.py +0 -0
  77. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_signature_client.py +0 -0
  78. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_tasking_client.py +0 -0
  79. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_vacuum.py +0 -0
  80. {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/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.2.dev2
3
+ Version: 4.7.2.dev5
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.2.dev5
@@ -200,55 +200,58 @@ class MetricsServer(ServerBase):
200
200
  self.apm_client.end_transaction('process_message', 'success')
201
201
 
202
202
  def _create_aggregated_metrics(self):
203
- self.log.info("Copying counters ...")
204
- # APM Transaction start
205
- if self.apm_client:
206
- self.apm_client.begin_transaction('metrics')
207
-
208
- with self.counters_lock:
209
- counter_copy, self.counters = self.counters, {}
203
+ try:
204
+ self.log.info("Copying counters ...")
205
+ # APM Transaction start
206
+ if self.apm_client:
207
+ self.apm_client.begin_transaction('metrics')
210
208
 
211
- self.log.info("Aggregating metrics ...")
212
- timestamp = now_as_iso()
213
- for component, counts in counter_copy.items():
214
- component_name, component_type = component
215
- output_metrics = {'name': component_name, 'type': component_type}
209
+ with self.counters_lock:
210
+ counter_copy, self.counters = self.counters, {}
216
211
 
217
- for key, value in counts.items():
218
- # Skip counts, they will be paired with a time entry and we only want to count it once
219
- if key.endswith('.c'):
220
- continue
221
- # We have an entry that is a timer, should also have a .c count
222
- elif key.endswith('.t'):
223
- name = key.rstrip('.t')
224
- output_metrics[name] = counts[key] / counts.get(name + ".c", 1)
225
- output_metrics[name + "_count"] = counts.get(name + ".c", 0)
226
- # Plain old metric, no modifications needed
227
- else:
228
- output_metrics[key] = value
212
+ self.log.info("Aggregating metrics ...")
213
+ timestamp = now_as_iso()
214
+ for component, counts in counter_copy.items():
215
+ component_name, component_type = component
216
+ output_metrics = {'name': component_name, 'type': component_type}
217
+
218
+ for key, value in counts.items():
219
+ # Skip counts, they will be paired with a time entry and we only want to count it once
220
+ if key.endswith('.c'):
221
+ continue
222
+ # We have an entry that is a timer, should also have a .c count
223
+ elif key.endswith('.t'):
224
+ name = key.rstrip('.t')
225
+ output_metrics[name] = counts[key] / max(counts.get(name + ".c", 1), 1)
226
+ output_metrics[name + "_count"] = counts.get(name + ".c", 0)
227
+ # Plain old metric, no modifications needed
228
+ else:
229
+ output_metrics[key] = value
229
230
 
230
- ensure_indexes(self.log, self.es, self.config.core.metrics.elasticsearch, [component_type],
231
- datastream_enabled=self.is_datastream)
231
+ ensure_indexes(self.log, self.es, self.config.core.metrics.elasticsearch, [component_type],
232
+ datastream_enabled=self.is_datastream)
232
233
 
233
- index = f"al_metrics_{component_type}"
234
- # Were data streams created for the index specified?
235
- try:
236
- if self.es.indices.get_index_template(name=f"{index}_ds"):
237
- output_metrics['@timestamp'] = timestamp
238
- index = f"{index}_ds"
239
- except elasticsearch.exceptions.TransportError:
240
- pass
241
- output_metrics['timestamp'] = timestamp
242
- output_metrics = cleanup_metrics(output_metrics)
234
+ index = f"al_metrics_{component_type}"
235
+ # Were data streams created for the index specified?
236
+ try:
237
+ if self.es.indices.get_index_template(name=f"{index}_ds"):
238
+ output_metrics['@timestamp'] = timestamp
239
+ index = f"{index}_ds"
240
+ except elasticsearch.exceptions.TransportError:
241
+ pass
242
+ output_metrics['timestamp'] = timestamp
243
+ output_metrics = cleanup_metrics(output_metrics)
243
244
 
244
- self.log.info(output_metrics)
245
- with_retries(self.log, self.es.index, index=index, body=output_metrics)
245
+ self.log.info(output_metrics)
246
+ with_retries(self.log, self.es.index, index=index, body=output_metrics)
246
247
 
247
- self.log.info("Metrics aggregated. Waiting for next run...")
248
+ self.log.info("Metrics aggregated. Waiting for next run...")
248
249
 
249
- # APM Transaction end
250
- if self.apm_client:
251
- self.apm_client.end_transaction('aggregate_metrics', 'success')
250
+ # APM Transaction end
251
+ if self.apm_client:
252
+ self.apm_client.end_transaction('aggregate_metrics', 'success')
253
+ except Exception:
254
+ self.log.exception("Unknown exception occurred during metrics aggregation:")
252
255
 
253
256
 
254
257
  # noinspection PyBroadException
@@ -380,7 +380,19 @@ def _get_dockerhub_tags(image_name, update_channel, prefix, proxies=None, docker
380
380
  # Based on https://docs.docker.com/docker-hub/api/latest/#tag/rate-limiting
381
381
  # We've hit the rate limit so we have to wait and try again later
382
382
  logger.warning(f"{prefix}Rate limit reached for DockerHub. Retrying after sleep..")
383
- time.sleep(int(response.headers['retry-after']) - int(time.time()))
383
+ # Fix for crash when retry-after is seconds vs timestamp
384
+ retry_after = int(response.headers.get('retry-after', 60))
385
+ # Check if it looks like a timestamp (huge number) or duration (small number)
386
+ # Docker Hub API documentation says duration in seconds.
387
+ if retry_after > 1700000000: # It's a timestamp
388
+ sleep_time = retry_after - int(time.time())
389
+ else: # It's a duration
390
+ sleep_time = retry_after
391
+
392
+ if sleep_time < 0:
393
+ sleep_time = 60 # Default to 60 seconds if calculation is wrong
394
+
395
+ time.sleep(sleep_time)
384
396
  else:
385
397
  logger.error(f"{prefix}HTTP error occurred: {e}")
386
398
  break
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: assemblyline-core
3
- Version: 4.7.2.dev2
3
+ Version: 4.7.2.dev5
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.2.dev2