in src/run.py [0:0]
def batch_results_job(batch_results: BatchResults):
_XRAY.put_annotation('batch_results_id', batch_results.id)
temp_dir = tempfile.TemporaryDirectory()
work_dir = Path(temp_dir.name)
tenant: Tenant = SP.modular_client.tenant_service().get(batch_results.tenant_name)
cloud = Cloud[tenant.cloud.upper()]
credentials = get_credentials(tenant, batch_results)
policies = BSP.policies_service.separate_ruleset(
from_=BSP.policies_service.ensure_event_driven_ruleset(cloud),
exclude=get_rules_to_exclude(tenant),
keep=set(
chain.from_iterable(batch_results.regions_to_rules().values())
)
)
loader = PoliciesLoader(
cloud=cloud,
output_dir=work_dir,
regions=BSP.environment_service.target_regions()
)
with EnvironmentContext(credentials, reset_all=False):
runner = Runner.factory(cloud, loader.load_from_regions_to_rules(
policies,
batch_results.regions_to_rules()
))
runner.start()
result = JobResult(work_dir, cloud)
keys_builder = TenantReportsBucketKeysBuilder(tenant)
collection = ShardsCollectionFactory.from_cloud(cloud)
collection.put_parts(result.iter_shard_parts())
meta = result.rules_meta()
collection.meta = meta
_LOG.info('Going to upload to SIEM')
upload_to_siem(
tenant=tenant,
collection=collection,
job=AmbiguousJob(batch_results),
)
collection.io = ShardsS3IO(
bucket=SP.environment_service.default_reports_bucket_name(),
key=keys_builder.ed_job_result(batch_results),
client=SP.s3
)
_LOG.debug('Writing job report')
collection.write_all() # writes job report
latest = ShardsCollectionFactory.from_cloud(cloud)
latest.io = ShardsS3IO(
bucket=SP.environment_service.default_reports_bucket_name(),
key=keys_builder.latest_key(),
client=SP.s3
)
_LOG.debug('Pulling latest state')
latest.fetch_by_indexes(collection.shards.keys())
latest.fetch_meta()
_LOG.info('Self-healing regions') # todo remove after a couple of releases
fix_s3_regions(latest)
difference = collection - latest
_LOG.debug('Writing latest state')
latest.update(collection)
latest.update_meta(meta)
latest.write_all()
latest.write_meta()
_LOG.debug('Writing difference')
difference.io = ShardsS3IO(
bucket=SP.environment_service.default_reports_bucket_name(),
key=keys_builder.ed_job_difference(batch_results),
client=SP.s3
)
difference.write_all()
_LOG.info('Writing statistics')
SP.s3.gz_put_json(
bucket=SP.environment_service.get_statistics_bucket_name(),
key=StatisticsBucketKeysBuilder.job_statistics(batch_results),
obj=result.statistics(tenant, runner.failed)
)
temp_dir.cleanup()