Rename application to Samsara and add assessment summary, detailed tabs and local Linux inventory
This commit is contained in:
34
samsara/analyzers/summary.py
Normal file
34
samsara/analyzers/summary.py
Normal file
@@ -0,0 +1,34 @@
|
||||
"""Compact, evidence-based presentation of the full assessment."""
|
||||
import re
|
||||
|
||||
# Name hints for server workloads, not a comprehensive application classifier.
|
||||
WORKLOAD = re.compile(r'(?:nginx|apache|httpd|iis|w3svc|sql|postgres|mariadb|mysql|redis|mongo|oracle|tomcat|haproxy|docker|containerd|podman|samba|smbd|nfs|bind|named|rabbitmq|kafka|jenkins|backup|reporting)', re.I)
|
||||
|
||||
|
||||
def summarize(data, assessment):
|
||||
server, inventory = data['server'], data['inventory']
|
||||
os_name = str(server.get('operating_system') or 'Not collected')
|
||||
version = server.get('os_version')
|
||||
if not version:
|
||||
match = re.search(r'\b(?:20\d{2}|\d+(?:\.\d+)+)\b', os_name)
|
||||
version = match[0] if match else 'Not collected'
|
||||
version = str(version)
|
||||
important = []
|
||||
for row in inventory.get('software', []):
|
||||
if WORKLOAD.search(row['name']) and not row['name'].lower().startswith('lib') and not row['name'].lower().endswith(('-dev', '-devel', '-doc')):
|
||||
important.append({'name': row['name'], 'version': row.get('version', 'Not collected'),
|
||||
'evidence': 'Installed software name matches a server-workload hint; use unverified'})
|
||||
names = {row['name'].lower().split(':')[0] for row in important}
|
||||
for row in inventory.get('services', []):
|
||||
if row.get('state') == 'Running' and WORKLOAD.search(row['name']) and row['name'].lower().removesuffix('.service') not in names:
|
||||
important.append({'name': row['name'], 'version': 'Not collected', 'evidence': 'Running service; application ownership requires review'})
|
||||
jobs = []
|
||||
for row in inventory.get('tasks', []):
|
||||
if row.get('enabled') or row.get('state') == 'Running':
|
||||
jobs.append({'name': row['name'], 'schedule': row.get('triggers', 'Schedule not collected'),
|
||||
'status': row.get('state', 'Enabled schedule; execution unverified'),
|
||||
'account': row.get('account', 'Not collected')})
|
||||
return {'os_type': os_name, 'version': version,
|
||||
'risk_score': assessment['score'], 'risk_level': assessment['level'],
|
||||
'software': important, 'jobs': jobs,
|
||||
'incomplete': sum(check['status'] != 'complete' for check in data['checks'].values())}
|
||||
Reference in New Issue
Block a user