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.
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/PKG-INFO +1 -1
- assemblyline_core-4.7.2.dev5/assemblyline_core/VERSION +1 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/metrics_server.py +45 -42
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/updater/helper.py +13 -1
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core.egg-info/PKG-INFO +1 -1
- assemblyline_core-4.7.2.dev2/assemblyline_core/VERSION +0 -1
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/LICENCE.md +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/README.md +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/alerter/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/alerter/processing.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/alerter/run_alerter.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/archiver/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/archiver/run_archiver.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/badlist_client.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/dispatching/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/dispatching/client.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/dispatching/dispatcher.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/dispatching/schedules.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/expiry/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/expiry/run_expiry.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/ingester/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/ingester/constants.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/ingester/ingester.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/es_metrics.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/helper.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/client.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/creator/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/creator/run.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/creator/run_worker.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/loader/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/loader/run.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/loader/run_worker.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/replay.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/safelist_client.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/collection.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/controllers/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/controllers/docker_ctl.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/controllers/interface.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/run_scaler.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/scaler_server.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/server_base.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/signature_client.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/submission_client.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/tasking_client.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/updater/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/updater/run_updater.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/crawler.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/department_map.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/safelist.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/stream_map.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/worker.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/workflow/__init__.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/workflow/run_workflow.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core.egg-info/SOURCES.txt +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core.egg-info/dependency_links.txt +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core.egg-info/requires.txt +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core.egg-info/top_level.txt +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/setup.cfg +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/setup.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_alerter.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_badlist_client.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_expiry.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_replay.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_safelist_client.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_scaler.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_scheduler.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_signature_client.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_tasking_client.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_vacuum.py +0 -0
- {assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/test/test_workflow.py +0 -0
|
@@ -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
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
self.apm_client
|
|
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
|
-
|
|
212
|
-
|
|
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
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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
|
-
|
|
231
|
-
|
|
231
|
+
ensure_indexes(self.log, self.es, self.config.core.metrics.elasticsearch, [component_type],
|
|
232
|
+
datastream_enabled=self.is_datastream)
|
|
232
233
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
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
|
-
|
|
245
|
-
|
|
245
|
+
self.log.info(output_metrics)
|
|
246
|
+
with_retries(self.log, self.es.index, index=index, body=output_metrics)
|
|
246
247
|
|
|
247
|
-
|
|
248
|
+
self.log.info("Metrics aggregated. Waiting for next run...")
|
|
248
249
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
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
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/updater/helper.py
RENAMED
|
@@ -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
|
-
|
|
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 +0,0 @@
|
|
|
1
|
-
4.7.2.dev2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/alerter/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/archiver/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/badlist_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/expiry/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/expiry/run_expiry.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/ingester/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/ingester/ingester.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/metrics/helper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/loader/run.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/replay/replay.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/safelist_client.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/collection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/scaler/run_scaler.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/server_base.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/signature_client.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/submission_client.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/tasking_client.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/updater/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/crawler.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/safelist.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/stream_map.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/vacuum/worker.py
RENAMED
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core/workflow/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.7.2.dev2 → assemblyline_core-4.7.2.dev5}/assemblyline_core.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|