From 203c4cccac4a1f8b7617e6bfe3dbc709f86274ea Mon Sep 17 00:00:00 2001 From: silversword411 Date: Thu, 1 Jan 2026 01:03:56 -0500 Subject: [PATCH 1/6] Update testing configuration and add Markdown format to valid formats --- .vscode/settings.json | 2 +- test_index.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 5d543c8..3e99ede 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,6 @@ "python.testing.pytestArgs": [ "." ], - "python.testing.unittestEnabled": true, + "python.testing.unittestEnabled": false, "python.testing.pytestEnabled": true } \ No newline at end of file diff --git a/test_index.py b/test_index.py index 59ff9f5..397f5b1 100644 --- a/test_index.py +++ b/test_index.py @@ -32,7 +32,7 @@ class ReportNamingConvention: # Update VALID_SCOPES to include base scopes, validation will extract base scope VALID_SCOPES = {"Client", "Site", "Agent", "Device", "Software Name", "ClientThenSite"} - VALID_FORMATS = {"csv", "pdf", "html"} + VALID_FORMATS = {"csv", "pdf", "html", "md"} VERSION_PATTERN = r"^v\d+(?:\.\d+)*$" @classmethod From c50ade9953738127bc1cb146a21376b87d6cd8bd Mon Sep 17 00:00:00 2001 From: silversword411 Date: Thu, 1 Jan 2026 01:14:12 -0500 Subject: [PATCH 2/6] Adding (md) to appropriate report names --- index.json | 56 +++++++++---------- ...on => Agent List_By Client (md) v1.3.json} | 2 +- ...Agent Specs.json => Agent Specs (md).json} | 2 +- ....json => Agents_Filtered by RAM (md).json} | 2 +- ...n => Agents_Pending Reboot (md) v1.2.json} | 2 +- ....json => Custom Fields Example1 (md).json} | 2 +- ...> Software Report Full_By Agent (md).json} | 2 +- ... Software Report Full_By Client (md).json} | 2 +- ...are Report Starts With_By Agent (md).json} | 2 +- ...son => Software Report_By Agent (md).json} | 2 +- ...Updates Not Installed_By Client (md).json} | 2 +- 11 files changed, 38 insertions(+), 38 deletions(-) rename templates/{Agent List_By Client v1.3.json => Agent List_By Client (md) v1.3.json} (99%) rename templates/{Agent Specs.json => Agent Specs (md).json} (98%) rename templates/{Agents_Filtered by RAM.json => Agents_Filtered by RAM (md).json} (97%) rename templates/{Agents_Pending Reboot v1.2.json => Agents_Pending Reboot (md) v1.2.json} (99%) rename templates/{Custom Fields Example1.json => Custom Fields Example1 (md).json} (97%) rename templates/{Software Report Full_By Agent.json => Software Report Full_By Agent (md).json} (96%) rename templates/{Software Report Full_By Client.json => Software Report Full_By Client (md).json} (97%) rename templates/{Software Report Starts With_By Agent.json => Software Report Starts With_By Agent (md).json} (97%) rename templates/{Software Report_By Agent.json => Software Report_By Agent (md).json} (98%) rename templates/{Windows Updates Not Installed_By Client.json => Windows Updates Not Installed_By Client (md).json} (96%) diff --git a/index.json b/index.json index 5b309ef..dae30d6 100644 --- a/index.json +++ b/index.json @@ -4,20 +4,20 @@ "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20List_By%20Client%20%28csv%29.json" }, { - "name": "Agent List_By Client (pdf)", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20List_By%20Client%20%28pdf%29.json" + "name": "Agent List_By Client (md) v1.3", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20List_By%20Client%20%28md%29%20v1.3.json" }, { - "name": "Agent List_By Client v1.3", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20List_By%20Client%20v1.3.json" + "name": "Agent List_By Client (pdf)", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20List_By%20Client%20%28pdf%29.json" }, { "name": "Agent List_By Client with Specs (pdf) v1.3", "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20List_By%20Client%20with%20Specs%20%28pdf%29%20v1.3.json" }, { - "name": "Agent Specs", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20Specs.json" + "name": "Agent Specs (md)", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20Specs%20%28md%29.json" }, { "name": "Agent TRMM Install date_descending v1.6", @@ -35,17 +35,17 @@ "name": "Agent_ListClientThenSite-alt (csv)", "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent_ListClientThenSite-alt%20%28csv%29.json" }, - { - "name": "Agents_Filtered by RAM", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agents_Filtered%20by%20RAM.json" - }, { "name": "Agents_Filtered by RAM (csv)", "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agents_Filtered%20by%20RAM%20%28csv%29.json" }, { - "name": "Agents_Pending Reboot v1.2", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agents_Pending%20Reboot%20v1.2.json" + "name": "Agents_Filtered by RAM (md)", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agents_Filtered%20by%20RAM%20%28md%29.json" + }, + { + "name": "Agents_Pending Reboot (md) v1.2", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agents_Pending%20Reboot%20%28md%29%20v1.2.json" }, { "name": "Alerts - Interactive Dashboard (html) v1.6", @@ -156,8 +156,8 @@ "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Comprehensive%20Report_by%20Client%20%28html%29%20v1.12.json" }, { - "name": "Custom Fields Example1", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Custom%20Fields%20Example1.json" + "name": "Custom Fields Example1 (md)", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Custom%20Fields%20Example1%20%28md%29.json" }, { "name": "Custom Fields Example2", @@ -195,29 +195,29 @@ "name": "Software Report - Advanced DataTables", "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20-%20Advanced%20DataTables.json" }, - { - "name": "Software Report Full_By Agent", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Full_By%20Agent.json" - }, { "name": "Software Report Full_By Agent (csv)", "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Full_By%20Agent%20%28csv%29.json" }, { - "name": "Software Report Full_By Client", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Full_By%20Client.json" + "name": "Software Report Full_By Agent (md)", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Full_By%20Agent%20%28md%29.json" }, { "name": "Software Report Full_By Client (csv)", "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Full_By%20Client%20%28csv%29.json" }, { - "name": "Software Report Starts With_By Agent", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Starts%20With_By%20Agent.json" + "name": "Software Report Full_By Client (md)", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Full_By%20Client%20%28md%29.json" + }, + { + "name": "Software Report Starts With_By Agent (md)", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Starts%20With_By%20Agent%20%28md%29.json" }, { - "name": "Software Report_By Agent", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report_By%20Agent.json" + "name": "Software Report_By Agent (md)", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report_By%20Agent%20%28md%29.json" }, { "name": "WIP-Dashboard Demo", @@ -231,14 +231,14 @@ "name": "Windows 11 Compatible List_By Client (html) v1.9", "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Windows%2011%20Compatible%20List_By%20Client%20%28html%29%20v1.9.json" }, - { - "name": "Windows Updates Not Installed_By Client", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Windows%20Updates%20Not%20Installed_By%20Client.json" - }, { "name": "Windows Updates Not Installed_By Client (csv)", "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Windows%20Updates%20Not%20Installed_By%20Client%20%28csv%29.json" }, + { + "name": "Windows Updates Not Installed_By Client (md)", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Windows%20Updates%20Not%20Installed_By%20Client%20%28md%29.json" + }, { "name": "Windows Updates_By Device (csv)", "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Windows%20Updates_By%20Device%20%28csv%29.json" diff --git a/templates/Agent List_By Client v1.3.json b/templates/Agent List_By Client (md) v1.3.json similarity index 99% rename from templates/Agent List_By Client v1.3.json rename to templates/Agent List_By Client (md) v1.3.json index 827ca16..0520383 100644 --- a/templates/Agent List_By Client v1.3.json +++ b/templates/Agent List_By Client (md) v1.3.json @@ -4,7 +4,7 @@ "html": "\n\n\n \n\n\n\n {% block content %}{% endblock %}\n\n\n" }, "template": { - "name": "Agent List_By Client v1.3", + "name": "Agent List_By Client (md) v1.3", "template_css": "", "template_md": "{% block content %}\r\n\r\n\r\n
\r\n
\r\n \"Amidaware\r\n
\r\n
\r\n

Agent Information Report

\r\n

Client: All | Site: All

\r\n
\r\n Filtered Row Count: 0 of {{ data_sources.agentsList | length }}\r\n
\r\n
\r\n
\r\n

Report Date:
{{ report_run_timestamp.strftime('%B %d, %Y') }}

\r\n
\r\n
\r\n\r\n{% set clients = data_sources.agentsList | map(attribute='site__client__name') | unique | sort %}\r\n{% set sites = data_sources.agentsList | map(attribute='site__name') | unique | sort %}\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n {% for item in data_sources.agentsList %}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% endfor %}\r\n \r\n
\r\n
\r\n Client\r\n \r\n
\r\n \r\n
\r\n
\r\n Site\r\n \r\n
\r\n \r\n
\r\n
\r\n Device Name\r\n \r\n
\r\n
\r\n
\r\n Last Logged In User\r\n \r\n
\r\n
\r\n
\r\n Operating System\r\n \r\n
\r\n
{{ item.site__client__name }}{{ item.site__name }}\r\n {{ item.hostname }}
\r\n {% if item.last_seen %}\r\n 30 %}text-danger{% endif %}\" data-sort-value=\"{{ item.last_seen.isoformat() }}\">\r\n Last Seen: {{ item.last_seen.astimezone(ZoneInfo('America/New_York')).strftime('%Y-%m-%d %H:%M:%S') }}\r\n \r\n {% else %}\r\n  \r\n {% endif %}\r\n
{{ item.last_logged_in_user }}{{ item.operating_system }}
\r\n\r\n\r\n{% endblock %}", "type": "markdown", diff --git a/templates/Agent Specs.json b/templates/Agent Specs (md).json similarity index 98% rename from templates/Agent Specs.json rename to templates/Agent Specs (md).json index 28bf340..4fe708c 100644 --- a/templates/Agent Specs.json +++ b/templates/Agent Specs (md).json @@ -4,7 +4,7 @@ "html": "\n\n\n \n\n\n\n\n {% block content %} \n {% endblock %}\n\n\n\n\n" }, "template": { - "name": "Agent Specs", + "name": "Agent Specs (md)", "template_css": "", "template_md": "{% block content %}\r\n
\r\n# ![Company Logo](https://github.com/amidaware/reporting-templates/blob/master/assets/gbtnavy%20(256).png?raw=true)\r\n\r\n
\r\n--- \r\n

{{ client.name }}

\r\n\r\n
\r\n---\r\n

Agent List

\r\n\r\n\r\n
\r\n\r\n \r\n \r\n\t\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t\r\n \r\n \r\n \r\n \r\n {% for item in data_sources.agentsList %}\r\n \r\n\t\r\n \r\n \r\n\t\r\n \r\n \r\n\r\n \r\n {% endfor %}\r\n \r\n
Device NameUserDevice OSDevice PlatformDevice RamDrive Info
{{ item.hostname }}{{ item.last_logged_in_user }}{{ item.operating_system }}{{item.wmi_detail.cpu[0][0].Name if item.wmi_detail and item.wmi_detail.cpu and item.wmi_detail.cpu[0][0].Name else 'N/A'}} {{ item.total_ram }}GB{{item.disks[0].device if item.disks and item.disks[0].device else 'N/A'}} {{item.disks[0].total if item.disks and item.disks[0].total else 'N/A'}}
\r\n
\r\n{% endblock %}", "type": "markdown", diff --git a/templates/Agents_Filtered by RAM.json b/templates/Agents_Filtered by RAM (md).json similarity index 97% rename from templates/Agents_Filtered by RAM.json rename to templates/Agents_Filtered by RAM (md).json index 8759a0d..7b5c6c0 100644 --- a/templates/Agents_Filtered by RAM.json +++ b/templates/Agents_Filtered by RAM (md).json @@ -4,7 +4,7 @@ "html": "\n\n \n \n \n \n \n {% block content %}{% endblock %}\n {% block header %}{% endblock %}\n \n" }, "template": { - "name": "Agents_Filtered by RAM", + "name": "Agents_Filtered by RAM (md)", "template_css": "", "template_md": "{% block content %}\r\n

Agents Filtered by less than {{low_ram}} GB RAM

\r\n\r\n\r\n \r\n \r\n\t\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t\r\n \r\n \r\n \r\n {% set filtered_agents = data_sources.agents|selectattr('total_ram', 'defined')|selectattr('total_ram', 'lt', low_ram|int)|list %}{% for item in filtered_agents %} \r\n\t\r\n\t\r\n\t\r\n\t\r\n\t\r\n\t\r\n \r\n \r\n {% endfor %}\r\n \r\n
Device NameUserDevice OSCPURAMHDD
{{item.hostname if item.hostname else 'N/A'}}{{item.last_logged_in_user if item.last_logged_in_user else 'N/A'}}{{item.operating_system|replace(\",\", \"\") if item.operating_system else 'N/A'}}{{item.wmi_detail.cpu[0][0].Name if item.wmi_detail and item.wmi_detail.cpu and item.wmi_detail.cpu[0][0].Name else 'N/A'}}{{item.total_ram if item.total_ram else 'N/A'}}GB{% for disk in item.disks %}{% if not loop.previtem or loop.previtem.device != disk.device %}{{disk.device}} {{disk.total}},{% endif %}{% else %}N/A,{% endfor %}
\r\n\r\n\r\n{% endblock %}", "type": "markdown", diff --git a/templates/Agents_Pending Reboot v1.2.json b/templates/Agents_Pending Reboot (md) v1.2.json similarity index 99% rename from templates/Agents_Pending Reboot v1.2.json rename to templates/Agents_Pending Reboot (md) v1.2.json index 34547a3..b44e62d 100644 --- a/templates/Agents_Pending Reboot v1.2.json +++ b/templates/Agents_Pending Reboot (md) v1.2.json @@ -4,7 +4,7 @@ "html": "\n\n\n \n\n\n\n {% block content %}{% endblock %}\n\n\n" }, "template": { - "name": "Agents_Pending Reboot v1.2", + "name": "Agents_Pending Reboot (md) v1.2", "template_css": "", "template_md": "{% block content %}\r\n\r\n\r\n
\r\n
\r\n \"Amidaware\r\n
\r\n
\r\n

{{ title | default('Pending Reboot Report') }}

\r\n

Client: All | Site: All

\r\n
\r\n Filtered Row Count: 0 of {{ data_sources.agentsPendingReboot | length }}\r\n
\r\n
\r\n
\r\n

Report Date:
{{ report_run_timestamp.strftime('%B %d, %Y') }}

\r\n
\r\n
\r\n\r\n{% set clients = data_sources.agentsPendingReboot | map(attribute='site__client__name') | unique | sort %}\r\n{% set sites = data_sources.agentsPendingReboot | map(attribute='site__name') | unique | sort %}\r\n{% set reboot_statuses = data_sources.agentsPendingReboot | map(attribute='needs_reboot') | unique | sort %}\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n {% for agent in data_sources.agentsPendingReboot %}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {% endfor %}\r\n \r\n
\r\n
\r\n Client\r\n \r\n
\r\n \r\n
\r\n
\r\n Site\r\n \r\n
\r\n \r\n
\r\n
\r\n Hostname\r\n \r\n
\r\n
\r\n
\r\n Needs Reboot\r\n \r\n
\r\n \r\n
{{ agent.site__client__name }}{{ agent.site__name }}\r\n {{ agent.hostname }}
\r\n {% if agent.last_seen %}\r\n 30 %}text-danger{% endif %}\" data-sort-value=\"{{ agent.last_seen.isoformat() }}\">\r\n Last Seen: {{ agent.last_seen.strftime('%Y-%m-%d') }}\r\n \r\n {% else %}\r\n  \r\n {% endif %}\r\n
{{ agent.needs_reboot }}
\r\n\r\n\r\n{% endblock %}", "type": "markdown", diff --git a/templates/Custom Fields Example1.json b/templates/Custom Fields Example1 (md).json similarity index 97% rename from templates/Custom Fields Example1.json rename to templates/Custom Fields Example1 (md).json index 1fae157..50dfdd4 100644 --- a/templates/Custom Fields Example1.json +++ b/templates/Custom Fields Example1 (md).json @@ -1,7 +1,7 @@ { "base_template": null, "template": { - "name": "Custom Fields Example1", + "name": "Custom Fields Example1 (md)", "template_css": "", "template_md": "# Agents\r\n\r\n> There needs to be an Agent custom fields named: **Agent Test Field** and **Agent Test Field 2**\r\n\r\n\r\n \r\n \r\n\t\r\n \r\n \r\n \r\n \r\n \r\n {% for item in data_sources.agents %}\r\n \r\n\t\r\n\t\r\n \r\n \r\n {% endfor %}\r\n \r\n
HostnameTest Field 1Test Field 2
{{ item.hostname }}{{ item.custom_fields.AgentTestField }}{{ item.custom_fields[\"Agent Test Field 2\"] }}
\r\n\r\n\r\n# Clients\r\n\r\n> There needs to be an Client custom fields named: **Client Test Field** and **Client Test Field 2**\r\n\r\n\r\n \r\n \r\n\t\r\n \r\n \r\n \r\n \r\n \r\n {% for item in data_sources.clients %}\r\n \r\n\t\r\n\t\r\n \r\n \r\n {% endfor %}\r\n \r\n
NameTest Field 1Test Field 2
{{ item.name }}{{ item.custom_fields.ClientTestField }}{{ item.custom_fields[\"Client Test Field 2\"] }}
\r\n\r\n\r\n# Sites\r\n\r\n> There needs to be an Site custom fields named: **Site Test Field** and **Site Test Field 2**\r\n\r\n\r\n \r\n \r\n\t\r\n \r\n \r\n \r\n \r\n \r\n {% for item in data_sources.sites %}\r\n \r\n\t\r\n\t\r\n \r\n \r\n {% endfor %}\r\n \r\n
NameTest Field 1Test Field 2
{{ item.name }}{{ item.custom_fields.SiteTestField }}{{ item.custom_fields[\"Site Test Field 2\"] }}
", "type": "markdown", diff --git a/templates/Software Report Full_By Agent.json b/templates/Software Report Full_By Agent (md).json similarity index 96% rename from templates/Software Report Full_By Agent.json rename to templates/Software Report Full_By Agent (md).json index d872213..9583492 100644 --- a/templates/Software Report Full_By Agent.json +++ b/templates/Software Report Full_By Agent (md).json @@ -4,7 +4,7 @@ "html": "\n\n \n \n \n \n \n {% block content %}{% endblock %}\n {% block header %}{% endblock %}\n \n" }, "template": { - "name": "Software Report Full_By Agent", + "name": "Software Report Full_By Agent (md)", "template_css": "", "template_md": "{% block content %}\r\n# Software Audit Report - {{agent.hostname}}\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% for record in data_sources.agentSoftware %}\r\n {% for software in record.software %}\r\n \r\n \r\n \r\n \r\n \r\n {% endfor %}\r\n {% endfor %}\r\n \r\n
Software NameVersionPublisher
{{ software.name or 'N/A' }}{{ software.version or 'N/A' }}{{ software.publisher or 'N/A' }}
\r\n\r\n{% endblock %}", "type": "markdown", diff --git a/templates/Software Report Full_By Client.json b/templates/Software Report Full_By Client (md).json similarity index 97% rename from templates/Software Report Full_By Client.json rename to templates/Software Report Full_By Client (md).json index 6958dc7..595a450 100644 --- a/templates/Software Report Full_By Client.json +++ b/templates/Software Report Full_By Client (md).json @@ -4,7 +4,7 @@ "html": "\n\n \n \n \n \n \n {% block content %}{% endblock %}\n {% block header %}{% endblock %}\n \n" }, "template": { - "name": "Software Report Full_By Client", + "name": "Software Report Full_By Client (md)", "template_css": "", "template_md": "{% block content %}\r\n# Software Audit Report - {{client.name}}\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% for record in data_sources.agentSoftware %}\r\n {% for software in record.software %}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {% endfor %}\r\n {% endfor %}\r\n \r\n
Device NameSoftware NameVersionPublisher
{{ record.agent__hostname or 'N/A' }}{{ software.name or 'N/A' }}{{ software.version or 'N/A' }}{{ software.publisher or 'N/A' }}
\r\n\r\n{% endblock %}", "type": "markdown", diff --git a/templates/Software Report Starts With_By Agent.json b/templates/Software Report Starts With_By Agent (md).json similarity index 97% rename from templates/Software Report Starts With_By Agent.json rename to templates/Software Report Starts With_By Agent (md).json index 9ea3054..3208cd1 100644 --- a/templates/Software Report Starts With_By Agent.json +++ b/templates/Software Report Starts With_By Agent (md).json @@ -4,7 +4,7 @@ "html": "\n\n \n \n \n \n \n {% block content %}{% endblock %}\n \n" }, "template": { - "name": "Software Report Starts With_By Agent", + "name": "Software Report Starts With_By Agent (md)", "template_css": "", "template_md": "{% block content %}\r\n# Software Audit Report - {{ software_name }}*\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% for record in data_sources.agentSoftware %}\r\n \r\n \r\n {% for software in record.software %} \r\n \r\n {% if software.name.lower().startswith(software_name.lower()) %}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% endif %}\r\n {% endfor %}\r\n {% endfor %}\r\n \r\n
ClientAgentSoftware NameVersionPublisher
{{ record.agent__site__client__name }}{{ record.agent__hostname }}{{ software.name }}{{ software.version }}{{ software.publisher }}
\r\n{% endblock %}", "type": "markdown", diff --git a/templates/Software Report_By Agent.json b/templates/Software Report_By Agent (md).json similarity index 98% rename from templates/Software Report_By Agent.json rename to templates/Software Report_By Agent (md).json index 007c2be..8b9bb8e 100644 --- a/templates/Software Report_By Agent.json +++ b/templates/Software Report_By Agent (md).json @@ -4,7 +4,7 @@ "html": "\n\n \n \n \n \n \n {% block content %}{% endblock %}\n {% block header %}{% endblock %}\n \n" }, "template": { - "name": "Software Report_By Agent", + "name": "Software Report_By Agent (md)", "template_css": "", "template_md": "{% block content %}\r\n\r\n# Software Audit Report - {{ software_name }}\r\nTarget Version: {{ target_version }}\r\nTotal Agents: {{ data_sources.agentSoftware|count }}\r\nAgents Needing Update: {{ data_sources.agentSoftware|count - data_sources.hasUpdate }}\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% for record in data_sources.agentSoftware %}\r\n \r\n \r\n {% for software in record.software %}\r\n\r\n \r\n {% if software.name == software_name %}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% endif %}\r\n {% endfor %}\r\n {% endfor %}\r\n \r\n
ClientAgentSoftware NameVersionPublisher
{{ record.agent__site__client__name }}{{ record.agent__hostname }}{{ software.name }}{{ software.version }}{{ software.publisher }}
\r\n{% endblock %}", "type": "markdown", diff --git a/templates/Windows Updates Not Installed_By Client.json b/templates/Windows Updates Not Installed_By Client (md).json similarity index 96% rename from templates/Windows Updates Not Installed_By Client.json rename to templates/Windows Updates Not Installed_By Client (md).json index a85ab79..176bbc9 100644 --- a/templates/Windows Updates Not Installed_By Client.json +++ b/templates/Windows Updates Not Installed_By Client (md).json @@ -4,7 +4,7 @@ "html": "\n\n \n \n \n \n \n {% block content %}{% endblock %}\n {% block header %}{% endblock %}\n \n" }, "template": { - "name": "Windows Updates Not Installed_By Client", + "name": "Windows Updates Not Installed_By Client (md)", "template_css": "", "template_md": "{% block content %}\r\n

Not Installed Windows Updates

\r\n\r\n\r\n \r\n \r\n\t\r\n\t\r\n\t\r\n\t\r\n \r\n \r\n \r\n{% set filtered_items = data_sources.allFieldsWindowsUpdates|selectattr('installed', 'ne', True)|list %}\r\n{% for item in filtered_items %}\r\n \r\n\t\r\n\t\r\n\t\r\n\t\r\n\r\n \r\n {% endfor %}\r\n \r\n
Device NameTitleInstalledSeverity
{{ item.agent__hostname if item.agent__hostname else 'N/A' }}{{ item.title if item.title else 'N/A' }}{{ item.installed if item.installed else 'False' }}{{ item.severity if item.severity else 'N/A' }}
\r\n\r\n\r\n{% endblock %}", "type": "markdown", From f62bbf2adbf1a19580b7ac6dec637a3eb52b1d1c Mon Sep 17 00:00:00 2001 From: silversword411 Date: Thu, 1 Jan 2026 01:26:52 -0500 Subject: [PATCH 3/6] Update VSCode settings to enhance UI color customizations and ensure pytest is enabled --- .vscode/settings.json | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 3e99ede..cce827c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,25 @@ "python.testing.pytestArgs": [ "." ], - "python.testing.unittestEnabled": false, - "python.testing.pytestEnabled": true + "python.testing.pytestEnabled": true, + "workbench.colorCustomizations": { + "activityBar.activeBackground": "#66b2ff", + "activityBar.background": "#66b2ff", + "activityBar.foreground": "#15202b", + "activityBar.inactiveForeground": "#15202b99", + "activityBarBadge.background": "#df006f", + "activityBarBadge.foreground": "#e7e7e7", + "commandCenter.border": "#15202b99", + "sash.hoverBorder": "#66b2ff", + "statusBar.background": "#3399ff", + "statusBar.foreground": "#15202b", + "statusBarItem.hoverBackground": "#007fff", + "statusBarItem.remoteBackground": "#3399ff", + "statusBarItem.remoteForeground": "#15202b", + "titleBar.activeBackground": "#3399ff", + "titleBar.activeForeground": "#15202b", + "titleBar.inactiveBackground": "#3399ff99", + "titleBar.inactiveForeground": "#15202b99" + }, + "peacock.color": "#3399ff" } \ No newline at end of file From 2fa0c0f39f6ef3e6e197b25f731c62ea54be79c4 Mon Sep 17 00:00:00 2001 From: silversword411 Date: Wed, 25 Feb 2026 21:43:08 -0500 Subject: [PATCH 4/6] Agent List_By Client with Specs (pdf) v1.6 - Fix NoneType is not iterable and margins. Agent_ListClientThenSite (csv) v1.1 - Version fix --- ...nt List_By Client with Specs (pdf) v1.3.json | 17 ----------------- ...nt List_By Client with Specs (pdf) v1.6.json | 17 +++++++++++++++++ .../Agent_ListClientThenSite (csv) v1.1.json | 12 ++++++++++++ templates/Agent_ListClientThenSite (csv).json | 12 ------------ 4 files changed, 29 insertions(+), 29 deletions(-) delete mode 100644 templates/Agent List_By Client with Specs (pdf) v1.3.json create mode 100644 templates/Agent List_By Client with Specs (pdf) v1.6.json create mode 100644 templates/Agent_ListClientThenSite (csv) v1.1.json delete mode 100644 templates/Agent_ListClientThenSite (csv).json diff --git a/templates/Agent List_By Client with Specs (pdf) v1.3.json b/templates/Agent List_By Client with Specs (pdf) v1.3.json deleted file mode 100644 index 50d3213..0000000 --- a/templates/Agent List_By Client with Specs (pdf) v1.3.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "base_template": { - "name": "Base Template_umyxxh", - "html": "\n \n \n \n \n {% block content %}{% endblock %}\n \n" - }, - "template": { - "name": "Agent List_By Client with Specs (pdf) v1.3", - "template_css": "@font-face {\r\n font-family: Fira Sans;\r\n font-weight: 400;\r\n src: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/firasans-regular.otf);\r\n}\r\n@font-face {\r\n font-family: Fira Sans;\r\n font-style: italic;\r\n font-weight: 400;\r\n src: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/firasans-italic.otf);\r\n}\r\n@font-face {\r\n font-family: Fira Sans;\r\n font-weight: 300;\r\n src: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/firasans-light.otf);\r\n}\r\n@font-face {\r\n font-family: Fira Sans;\r\n font-style: italic;\r\n font-weight: 300;\r\n src: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/firasans-lightitalic.otf);\r\n}\r\n@font-face {\r\n font-family: Fira Sans;\r\n font-weight: 700;\r\n src: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/firasans-bold.otf);\r\n}\r\n\r\n@page {\r\n size: landscape;\r\n @top-left {\r\n background: #ffcc00;\r\n content: \"\";\r\n height: 50px;\r\n width: 50px;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n background-image: url('https://github.com/amidaware/reporting-templates/blob/471b2d34fae8029d8c05b6c3d000c027648a07e4/assets/2orig1%20(256).png?raw=true');\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n }\r\n @top-center {\r\n background: #ffcc00;\r\n content: '';\r\n display: block;\r\n height: .05cm;\r\n opacity: .5;\r\n width: 100%;\r\n }\r\n \r\n @bottom-left {\r\n background: #ffcc00;\r\n content: counter(page);\r\n height: 1cm;\r\n text-align: center;\r\n width: 1cm;\r\n }\r\n @bottom-center {\r\n background: #ffcc00;\r\n content: '';\r\n display: block;\r\n height: .05cm;\r\n opacity: .5;\r\n width: 100%;\r\n }\r\n @bottom-right {\r\n content: string(heading);\r\n font-size: 9pt;\r\n height: 1cm;\r\n vertical-align: middle;\r\n width: 100%;\r\n }\r\n}\r\n@page :blank {\r\n @top-left { background: none; content: '' }\r\n @top-center { content: none }\r\n @top-right { content: none }\r\n}\r\n@page no-chapter {\r\n @top-left { background: none; content: none }\r\n @top-center { content: none }\r\n @top-right { content: none }\r\n}\r\n@page :first {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/report-cover.jpg) no-repeat center;\r\n background-size: cover;\r\n margin: 0;\r\n}\r\n@page chapter {\r\n background: #ffcc00;\r\n margin: 0;\r\n @top-left { content: none }\r\n @top-center { content: none }\r\n @top-right { content: none }\r\n}\r\n.page-break {\r\n page-break-before: always; /* For older browsers */\r\n break-before: page; /* For newer browsers */\r\n}\r\n\r\n\r\nhtml {\r\n color: #393939;\r\n font-family: Fira Sans;\r\n font-size: 11pt;\r\n font-weight: 300;\r\n line-height: 1.5;\r\n}\r\n\r\nh1 {\r\n color: #ffcc00;\r\n font-size: 38pt;\r\n margin: 5cm 2cm 0 2cm;\r\n page: no-chapter;\r\n width: 100%;\r\n}\r\nh2, h3, h4 {\r\n color: black;\r\n font-weight: 400;\r\n}\r\nh2 {\r\n break-before: always;\r\n font-size: 28pt;\r\n string-set: heading content();\r\n}\r\nh3 {\r\n font-weight: 300;\r\n font-size: 15pt;\r\n}\r\nh4 {\r\n font-size: 13pt;\r\n}\r\n\r\n#cover {\r\n align-content: space-between;\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n#cover address {\r\n position: absolute; /* Absolute positioning */\r\n bottom: 0; /* Stick to the bottom */\r\n width: 100%; /* Full width */\r\n text-align: center; /* Center the text */\r\n background: transparent; /* Optional: make background transparent or adjust as needed */\r\n margin: 0; /* Remove margins */\r\n padding: 20px 0; /* Add padding at the top and bottom */\r\n}\r\n#cover address:first-of-type {\r\n padding-left: 3cm;\r\n}\r\n#contents {\r\n page: no-chapter;\r\n}\r\n#contents h2 {\r\n font-size: 20pt;\r\n font-weight: 400;\r\n margin-bottom: 3cm;\r\n}\r\n#contents h3 {\r\n font-weight: 500;\r\n margin: 3em 0 1em;\r\n}\r\n#contents h3::before {\r\n background: #ffcc00;\r\n content: '';\r\n display: block;\r\n height: .08cm;\r\n margin-bottom: .25cm;\r\n width: 2cm;\r\n}\r\n#contents ul {\r\n list-style: none;\r\n padding-left: 0;\r\n}\r\n#contents ul li {\r\n border-top: .25pt solid #c1c1c1;\r\n margin: .25cm 0;\r\n padding-top: .25cm;\r\n}\r\n#contents ul li::before {\r\n color: #ffcc00;\r\n content: '• ';\r\n font-size: 40pt;\r\n line-height: 16pt;\r\n vertical-align: bottom;\r\n}\r\n#contents ul li a {\r\n color: inherit;\r\n text-decoration-line: inherit;\r\n}\r\n#contents ul li a::before {\r\n content: target-text(attr(href));\r\n}\r\n#contents ul li a::after {\r\n color: #ffcc00;\r\n content: target-counter(attr(href), page);\r\n float: right;\r\n}\r\n\r\n#columns section {\r\n columns: 2;\r\n column-gap: 1cm;\r\n padding-top: 1cm;\r\n}\r\n#columns section p {\r\n text-align: justify;\r\n}\r\n#columns section p:first-of-type {\r\n font-weight: 700;\r\n}\r\n\r\n#skills h3 {\r\n background: #ffcc00;\r\n margin: 0 -3cm 1cm;\r\n padding: 1cm 1cm 1cm 3cm;\r\n width: 21cm;\r\n}\r\n#skills section {\r\n padding: .5cm 0;\r\n}\r\ntable.GeneratedTable {\r\n width: 100%;\r\n background-color: #ffffff;\r\n border-collapse: collapse;\r\n border-width: 2px;\r\n border-color: #ffcc00;\r\n border-style: solid;\r\n color: #000000;\r\n}\r\n\r\ntable.GeneratedTable td, table.GeneratedTable th {\r\n border-width: 2px;\r\n border-color: #ffcc00;\r\n border-style: solid;\r\n padding: 3px;\r\n}\r\n\r\ntable.GeneratedTable thead {\r\n background-color: #ffcc00;\r\n}\r\n#skills section#tablecontent::before {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/table-content.svg) no-repeat center #ffcc00;\r\n background-size: 50%;\r\n content: '';\r\n display: inline-block;\r\n float: left;\r\n height: 2cm;\r\n margin-right: .5cm;\r\n vertical-align: middle;\r\n width: 2cm;\r\n}\r\n#skills section#heading::before {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/heading.svg) no-repeat center #ffcc00;\r\n background-size: 50%;\r\n content: '';\r\n display: inline-block;\r\n float: left;\r\n height: 2cm;\r\n margin-right: .5cm;\r\n vertical-align: middle;\r\n width: 2cm;\r\n}\r\n#skills section#multicolumns::before {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/multi-columns.svg) no-repeat center #ffcc00;\r\n background-size: 50%;\r\n content: '';\r\n display: inline-block;\r\n float: left;\r\n height: 2cm;\r\n margin-right: .5cm;\r\n vertical-align: middle;\r\n width: 2cm;\r\n}\r\n#skills section#internallinks::before {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/internal-links.svg) no-repeat center #ffcc00;\r\n background-size: 50%;\r\n content: '';\r\n display: inline-block;\r\n float: left;\r\n height: 2cm;\r\n margin-right: .5cm;\r\n vertical-align: middle;\r\n width: 2cm;\r\n}\r\n#skills section#style::before {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/style.svg) no-repeat center #ffcc00;\r\n background-size: 50%;\r\n content: '';\r\n display: inline-block;\r\n float: left;\r\n height: 2cm;\r\n margin-right: .5cm;\r\n vertical-align: middle;\r\n width: 2cm;\r\n}\r\n#skills section h4 {\r\n margin: 0;\r\n}\r\n#skills section p {\r\n margin-top: 0;\r\n}\r\n\r\n#offers {\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n}\r\n#offers h2, #offers h3 {\r\n width: 100%;\r\n}\r\n#offers section {\r\n width: 30%;\r\n}\r\n#offers section h4 {\r\n margin-bottom: 0;\r\n}\r\n#offers section ul {\r\n list-style: none;\r\n margin: 0;\r\n padding-left: 0;\r\n}\r\n#offers section ul li:not(:last-of-type) {\r\n margin: .5cm 0;\r\n}\r\n#offers section p {\r\n background: #ffcc00;\r\n display: block;\r\n font-size: 15pt;\r\n font-weight: 700;\r\n margin-bottom: 0;\r\n padding: .25cm 0;\r\n text-align: center;\r\n}\r\n\r\n#chapter {\r\n align-items: center;\r\n display: flex;\r\n height: 297mm;\r\n justify-content: center;\r\n page: chapter;\r\n}\r\n\r\n#typography section {\r\n display: flex;\r\n flex-wrap: wrap;\r\n margin: 1cm 0;\r\n}\r\n#typography section h4 {\r\n border-top: 1pt solid;\r\n flex: 1 25%;\r\n margin: 0;\r\n}\r\n#typography section h4 + * {\r\n flex: 1 75%;\r\n margin: 0;\r\n padding-left: .5cm;\r\n}\r\n#typography section p {\r\n text-align: justify;\r\n}\r\n#typography section ul {\r\n line-height: 2;\r\n list-style: none;\r\n}\r\n#typography section#smallcaps p {\r\n font-variant: small-caps;\r\n}\r\n#typography section#ligatures dl {\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n#typography section#ligatures dl dt {\r\n font-weight: 400;\r\n width: 30%;\r\n}\r\n#typography section#ligatures dl dd {\r\n flex: 1 70%;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n#typography section#ligatures .none {\r\n font-variant-ligatures: none;\r\n}\r\n#typography section#ligatures .common {\r\n font-variant-ligatures: common-ligatures;\r\n}\r\n#typography section#ligatures .discretionary {\r\n font-variant-ligatures: discretionary-ligatures;\r\n}\r\n#typography section#ligatures .contextual {\r\n font-variant-ligatures: contextual;\r\n}\r\n#typography section#numbers dl {\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n#typography section#numbers dl dt {\r\n font-weight: 400;\r\n width: 30%;\r\n}\r\n#typography section#numbers dl dd {\r\n flex: 1 70%;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n#typography section#numbers #fractions {\r\n font-variant-numeric: diagonal-fractions;\r\n}\r\n#typography section#numbers #ordinals {\r\n font-variant-numeric: ordinal;\r\n}\r\n#typography section#numbers #slashed {\r\n font-variant-numeric: slashed-zero;\r\n}\r\n#typography section#numbers #super {\r\n font-variant-position: super;\r\n}\r\n#typography section#numbers #sub {\r\n font-variant-position: sub;\r\n}\r\n#typography section#figures dl {\r\n columns: 4;\r\n}\r\n#typography section#figures dl dt {\r\n font-weight: 400;\r\n}\r\n#typography section#figures dl dd {\r\n display: flex;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n#typography section#figures dl dd ul {\r\n padding: 0 1em 0 0;\r\n}\r\n#typography section#figures #oldstyle {\r\n font-variant-numeric: oldstyle-nums;\r\n}", - "template_md": "{% block content %}\r\n\r\n\r\n~~A cover~~\r\n# Agent List for {{client.name}}\r\n
\r\nCompany\r\n123 anywhere st\r\nCity, State zip\r\n
\r\n
\r\nme@here.com\r\nhttps://example.com\r\n
\r\n~~/A~~\r\n~~A~~\r\n{{ client.name }} Agents List\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% for item in data_sources.agentAllFields %}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% endfor %}\r\n \r\n
Agent InfoSite Name
\r\n Name:
\r\n User:
\r\n OS:
\r\n Last Seen:
\r\n
\r\n {{ item.hostname }}
\r\n {{ item.last_logged_in_user }}
\r\n {{ item.operating_system.split(',')[0] if item.operating_system else 'N/A' }}
\r\n \r\n \r\n {% if item.last_seen and report_run_timestamp and (report_run_timestamp - item.last_seen).days > 7 %}\r\n {{ item.last_seen.strftime('%Y-%m-%d %H:%M') }}
\r\n {% elif item.last_seen %}\r\n {{ item.last_seen.strftime('%Y-%m-%d %H:%M') }}
\r\n {% else %}\r\n N/A
\r\n {% endif %}\r\n\r\n
\r\n CPU:
\r\n RAM:
\r\n Disks:
\r\n
\r\n {{ item.wmi_detail.cpu[0][0].Name.replace('(R)', '').replace('(TM)', '').split('@')[0].strip() if item.wmi_detail and item.wmi_detail.cpu and item.wmi_detail.cpu[0][0].Name else 'N/A' }}
\r\n {{ item.total_ram }}GB
\r\n {% for disk in item.disks %}\r\n {% if not loop.previtem or loop.previtem.device != disk.device %}\r\n {% set total_gb = disk.total | replace('GB','') | float(0) %}\r\n {% set free_gb = disk.free | replace('GB','') | float(0) %}\r\n {% set used_gb = total_gb - free_gb %}\r\n {% set usage_percent = (used_gb / total_gb) * 100 if total_gb > 0 else 0 %}\r\n \r\n {% set bar_class = '' %}\r\n {% if usage_percent > 90 %}\r\n {% set bar_class = 'critical' %}\r\n {% elif usage_percent > 80 %}\r\n {% set bar_class = 'warning' %}\r\n {% endif %}\r\n\r\n {{ disk.device }} {{ disk.free }} free of {{ disk.total }}
\r\n
\r\n
\r\n
\r\n {% endif %}\r\n {% else %}\r\n N/A
\r\n {% endfor %}\r\n
{{ item.site__name }}
\r\n~~/A~~\r\n{% endblock %}", - "type": "markdown", - "depends_on": [ - "client" - ], - "template_variables": "data_sources:\n agentAllFields:\n only:\n - hostname\n - operating_system\n - last_seen\n - last_logged_in_user\n - site__name\n - wmi_detail\n - total_ram\n - disks\n filter:\n site__client_id: \"{{client.id}}\"\n model: agent\nreport_run_timestamp: !now" - }, - "assets": [] -} \ No newline at end of file diff --git a/templates/Agent List_By Client with Specs (pdf) v1.6.json b/templates/Agent List_By Client with Specs (pdf) v1.6.json new file mode 100644 index 0000000..823e209 --- /dev/null +++ b/templates/Agent List_By Client with Specs (pdf) v1.6.json @@ -0,0 +1,17 @@ +{ + "base_template": { + "name": "Base Template", + "html": "\n \n \n \n \n {% block content %}{% endblock %}\n \n" + }, + "template": { + "name": "Agent List_By Client with Specs (pdf) v1.6", + "template_css": "@font-face {\r\n font-family: Fira Sans;\r\n font-weight: 400;\r\n src: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/firasans-regular.otf);\r\n}\r\n@font-face {\r\n font-family: Fira Sans;\r\n font-style: italic;\r\n font-weight: 400;\r\n src: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/firasans-italic.otf);\r\n}\r\n@font-face {\r\n font-family: Fira Sans;\r\n font-weight: 300;\r\n src: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/firasans-light.otf);\r\n}\r\n@font-face {\r\n font-family: Fira Sans;\r\n font-style: italic;\r\n font-weight: 300;\r\n src: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/firasans-lightitalic.otf);\r\n}\r\n@font-face {\r\n font-family: Fira Sans;\r\n font-weight: 700;\r\n src: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/firasans-bold.otf);\r\n}\r\n\r\n@page {\r\n size: landscape;\r\n margin: 3.3cm 1.5cm 2.7cm 1.5cm;\r\n @top-left {\r\n background: #ffcc00;\r\n content: \"\";\r\n height: 50px;\r\n width: 50px;\r\n background-image: url('https://github.com/amidaware/reporting-templates/blob/471b2d34fae8029d8c05b6c3d000c027648a07e4/assets/2orig1%20(256).png?raw=true');\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n }\r\n @top-center {\r\n background: #ffcc00;\r\n content: '';\r\n display: block;\r\n height: .05cm;\r\n opacity: .5;\r\n width: 100%;\r\n }\r\n \r\n @bottom-left {\r\n background: #ffcc00;\r\n content: counter(page);\r\n height: 1cm;\r\n text-align: center;\r\n width: 1cm;\r\n }\r\n @bottom-center {\r\n background: #ffcc00;\r\n content: '';\r\n display: block;\r\n height: .05cm;\r\n opacity: .5;\r\n width: 100%;\r\n }\r\n @bottom-right {\r\n content: string(heading);\r\n font-size: 9pt;\r\n height: 1cm;\r\n vertical-align: middle;\r\n width: 100%;\r\n }\r\n}\r\n@page :blank {\r\n @top-left { background: none; content: '' }\r\n @top-center { content: none }\r\n @top-right { content: none }\r\n}\r\n@page no-chapter {\r\n @top-left { background: none; content: none }\r\n @top-center { content: none }\r\n @top-right { content: none }\r\n}\r\n@page :first {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/report-cover.jpg) no-repeat center;\r\n background-size: cover;\r\n margin: 0;\r\n}\r\n@page chapter {\r\n background: #ffcc00;\r\n margin: 0;\r\n @top-left { content: none }\r\n @top-center { content: none }\r\n @top-right { content: none }\r\n}\r\n.page-break {\r\n page-break-before: always; /* For older browsers */\r\n break-before: page; /* For newer browsers */\r\n}\r\n\r\n\r\nhtml {\r\n color: #393939;\r\n font-family: Fira Sans;\r\n font-size: 11pt;\r\n font-weight: 300;\r\n line-height: 1.5;\r\n}\r\nbody {\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\nh1 {\r\n color: #ffcc00;\r\n font-size: 38pt;\r\n margin: 5cm 2cm 0 2cm;\r\n page: no-chapter;\r\n width: 100%;\r\n}\r\nh2, h3, h4 {\r\n color: black;\r\n font-weight: 400;\r\n}\r\nh2 {\r\n break-before: always;\r\n font-size: 28pt;\r\n string-set: heading content();\r\n}\r\nh3 {\r\n font-weight: 300;\r\n font-size: 15pt;\r\n}\r\nh4 {\r\n font-size: 13pt;\r\n}\r\n\r\n#cover {\r\n align-content: space-between;\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n#cover address {\r\n position: absolute; /* Absolute positioning */\r\n bottom: 0; /* Stick to the bottom */\r\n width: 100%; /* Full width */\r\n text-align: center; /* Center the text */\r\n background: transparent; /* Optional: make background transparent or adjust as needed */\r\n margin: 0; /* Remove margins */\r\n padding: 20px 0; /* Add padding at the top and bottom */\r\n}\r\n#cover address:first-of-type {\r\n padding-left: 3cm;\r\n}\r\n#contents {\r\n page: no-chapter;\r\n}\r\n#contents h2 {\r\n font-size: 20pt;\r\n font-weight: 400;\r\n margin-bottom: 3cm;\r\n}\r\n#contents h3 {\r\n font-weight: 500;\r\n margin: 3em 0 1em;\r\n}\r\n#contents h3::before {\r\n background: #ffcc00;\r\n content: '';\r\n display: block;\r\n height: .08cm;\r\n margin-bottom: .25cm;\r\n width: 2cm;\r\n}\r\n#contents ul {\r\n list-style: none;\r\n padding-left: 0;\r\n}\r\n#contents ul li {\r\n border-top: .25pt solid #c1c1c1;\r\n margin: .25cm 0;\r\n padding-top: .25cm;\r\n}\r\n#contents ul li::before {\r\n color: #ffcc00;\r\n content: '• ';\r\n font-size: 40pt;\r\n line-height: 16pt;\r\n vertical-align: bottom;\r\n}\r\n#contents ul li a {\r\n color: inherit;\r\n text-decoration-line: inherit;\r\n}\r\n#contents ul li a::before {\r\n content: target-text(attr(href));\r\n}\r\n#contents ul li a::after {\r\n color: #ffcc00;\r\n content: target-counter(attr(href), page);\r\n float: right;\r\n}\r\n\r\n#columns section {\r\n columns: 2;\r\n column-gap: 1cm;\r\n padding-top: 1cm;\r\n}\r\n#columns section p {\r\n text-align: justify;\r\n}\r\n#columns section p:first-of-type {\r\n font-weight: 700;\r\n}\r\n\r\n#skills h3 {\r\n background: #ffcc00;\r\n margin: 0 -3cm 1cm;\r\n padding: 1cm 1cm 1cm 3cm;\r\n width: 21cm;\r\n}\r\n#skills section {\r\n padding: .5cm 0;\r\n}\r\ntable.GeneratedTable {\r\n width: 100%;\r\n background-color: #ffffff;\r\n border-collapse: separate;\r\n border-spacing: 0;\r\n border-width: 2px;\r\n border-color: #ffcc00;\r\n border-style: solid;\r\n color: #000000;\r\n}\r\n\r\ntable.GeneratedTable td, table.GeneratedTable th {\r\n border-width: 2px;\r\n border-color: #ffcc00;\r\n border-style: solid;\r\n padding: 3px;\r\n}\r\n\r\ntable.GeneratedTable thead {\r\n background-color: #ffcc00;\r\n}\r\n#skills section#tablecontent::before {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/table-content.svg) no-repeat center #ffcc00;\r\n background-size: 50%;\r\n content: '';\r\n display: inline-block;\r\n float: left;\r\n height: 2cm;\r\n margin-right: .5cm;\r\n vertical-align: middle;\r\n width: 2cm;\r\n}\r\n#skills section#heading::before {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/heading.svg) no-repeat center #ffcc00;\r\n background-size: 50%;\r\n content: '';\r\n display: inline-block;\r\n float: left;\r\n height: 2cm;\r\n margin-right: .5cm;\r\n vertical-align: middle;\r\n width: 2cm;\r\n}\r\n#skills section#multicolumns::before {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/multi-columns.svg) no-repeat center #ffcc00;\r\n background-size: 50%;\r\n content: '';\r\n display: inline-block;\r\n float: left;\r\n height: 2cm;\r\n margin-right: .5cm;\r\n vertical-align: middle;\r\n width: 2cm;\r\n}\r\n#skills section#internallinks::before {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/internal-links.svg) no-repeat center #ffcc00;\r\n background-size: 50%;\r\n content: '';\r\n display: inline-block;\r\n float: left;\r\n height: 2cm;\r\n margin-right: .5cm;\r\n vertical-align: middle;\r\n width: 2cm;\r\n}\r\n#skills section#style::before {\r\n background: url(https://raw.githubusercontent.com/CourtBouillon/weasyprint-samples/master/report/style.svg) no-repeat center #ffcc00;\r\n background-size: 50%;\r\n content: '';\r\n display: inline-block;\r\n float: left;\r\n height: 2cm;\r\n margin-right: .5cm;\r\n vertical-align: middle;\r\n width: 2cm;\r\n}\r\n#skills section h4 {\r\n margin: 0;\r\n}\r\n#skills section p {\r\n margin-top: 0;\r\n}\r\n\r\n#offers {\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: space-between;\r\n}\r\n#offers h2, #offers h3 {\r\n width: 100%;\r\n}\r\n#offers section {\r\n width: 30%;\r\n}\r\n#offers section h4 {\r\n margin-bottom: 0;\r\n}\r\n#offers section ul {\r\n list-style: none;\r\n margin: 0;\r\n padding-left: 0;\r\n}\r\n#offers section ul li:not(:last-of-type) {\r\n margin: .5cm 0;\r\n}\r\n#offers section p {\r\n background: #ffcc00;\r\n display: block;\r\n font-size: 15pt;\r\n font-weight: 700;\r\n margin-bottom: 0;\r\n padding: .25cm 0;\r\n text-align: center;\r\n}\r\n\r\n#chapter {\r\n align-items: center;\r\n display: flex;\r\n height: 297mm;\r\n justify-content: center;\r\n page: chapter;\r\n}\r\n\r\n#typography section {\r\n display: flex;\r\n flex-wrap: wrap;\r\n margin: 1cm 0;\r\n}\r\n#typography section h4 {\r\n border-top: 1pt solid;\r\n flex: 1 25%;\r\n margin: 0;\r\n}\r\n#typography section h4 + * {\r\n flex: 1 75%;\r\n margin: 0;\r\n padding-left: .5cm;\r\n}\r\n#typography section p {\r\n text-align: justify;\r\n}\r\n#typography section ul {\r\n line-height: 2;\r\n list-style: none;\r\n}\r\n#typography section#smallcaps p {\r\n font-variant: small-caps;\r\n}\r\n#typography section#ligatures dl {\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n#typography section#ligatures dl dt {\r\n font-weight: 400;\r\n width: 30%;\r\n}\r\n#typography section#ligatures dl dd {\r\n flex: 1 70%;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n#typography section#ligatures .none {\r\n font-variant-ligatures: none;\r\n}\r\n#typography section#ligatures .common {\r\n font-variant-ligatures: common-ligatures;\r\n}\r\n#typography section#ligatures .discretionary {\r\n font-variant-ligatures: discretionary-ligatures;\r\n}\r\n#typography section#ligatures .contextual {\r\n font-variant-ligatures: contextual;\r\n}\r\n#typography section#numbers dl {\r\n display: flex;\r\n flex-wrap: wrap;\r\n}\r\n#typography section#numbers dl dt {\r\n font-weight: 400;\r\n width: 30%;\r\n}\r\n#typography section#numbers dl dd {\r\n flex: 1 70%;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n#typography section#numbers #fractions {\r\n font-variant-numeric: diagonal-fractions;\r\n}\r\n#typography section#numbers #ordinals {\r\n font-variant-numeric: ordinal;\r\n}\r\n#typography section#numbers #slashed {\r\n font-variant-numeric: slashed-zero;\r\n}\r\n#typography section#numbers #super {\r\n font-variant-position: super;\r\n}\r\n#typography section#numbers #sub {\r\n font-variant-position: sub;\r\n}\r\n#typography section#figures dl {\r\n columns: 4;\r\n}\r\n#typography section#figures dl dt {\r\n font-weight: 400;\r\n}\r\n#typography section#figures dl dd {\r\n display: flex;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n#typography section#figures dl dd ul {\r\n padding: 0 1em 0 0;\r\n}\r\n#typography section#figures #oldstyle {\r\n font-variant-numeric: oldstyle-nums;\r\n}", + "template_md": "{% block content %}\r\n\r\n\r\n~~A cover~~\r\n# Agent List for {{client.name}}\r\n
\r\nCompany\r\n123 anywhere st\r\nCity, State zip\r\n
\r\n
\r\nme@here.com\r\nhttps://example.com\r\n
\r\n~~/A~~\r\n~~A~~\r\n{{ client.name }} Agents List\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% for item in data_sources.agentAllFields %}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% endfor %}\r\n \r\n
Agent InfoSite Name
\r\n Name:
\r\n User:
\r\n OS:
\r\n Last Seen:
\r\n
\r\n {{ item.hostname }}
\r\n {{ item.last_logged_in_user }}
\r\n {{ item.operating_system.split(',')[0] if item.operating_system else 'N/A' }}
\r\n \r\n \r\n {% if item.last_seen and report_run_timestamp and (report_run_timestamp - item.last_seen).days > 7 %}\r\n {{ item.last_seen.strftime('%Y-%m-%d %H:%M') }}
\r\n {% elif item.last_seen %}\r\n {{ item.last_seen.strftime('%Y-%m-%d %H:%M') }}
\r\n {% else %}\r\n N/A
\r\n {% endif %}\r\n\r\n
\r\n CPU:
\r\n RAM:
\r\n Disks:
\r\n
\r\n {{ item.wmi_detail.cpu[0][0].Name.replace('(R)', '').replace('(TM)', '').split('@')[0].strip() if item.wmi_detail and item.wmi_detail.cpu and item.wmi_detail.cpu[0][0].Name else 'N/A' }}
\r\n {{ item.total_ram }}GB
\r\n {% for disk in item.disks or [] %}\r\n {% if not loop.previtem or loop.previtem.device != disk.device %}\r\n {% set total_gb = disk.total | replace('GB','') | float(0) %}\r\n {% set free_gb = disk.free | replace('GB','') | float(0) %}\r\n {% set used_gb = total_gb - free_gb %}\r\n {% set usage_percent = (used_gb / total_gb) * 100 if total_gb > 0 else 0 %}\r\n \r\n {% set bar_class = '' %}\r\n {% if usage_percent > 90 %}\r\n {% set bar_class = 'critical' %}\r\n {% elif usage_percent > 80 %}\r\n {% set bar_class = 'warning' %}\r\n {% endif %}\r\n\r\n {{ disk.device }} {{ disk.free }} free of {{ disk.total }}
\r\n
\r\n
\r\n
\r\n {% endif %}\r\n {% else %}\r\n N/A
\r\n {% endfor %}\r\n
{{ item.site__name }}
\r\n~~/A~~\r\n{% endblock %}", + "type": "markdown", + "depends_on": [ + "client" + ], + "template_variables": "data_sources:\n agentAllFields:\n only:\n - hostname\n - operating_system\n - last_seen\n - last_logged_in_user\n - site__name\n - wmi_detail\n - total_ram\n - disks\n filter:\n site__client_id: \"{{client.id}}\"\n model: agent\nreport_run_timestamp: !now" + }, + "assets": [] +} \ No newline at end of file diff --git a/templates/Agent_ListClientThenSite (csv) v1.1.json b/templates/Agent_ListClientThenSite (csv) v1.1.json new file mode 100644 index 0000000..123b2b8 --- /dev/null +++ b/templates/Agent_ListClientThenSite (csv) v1.1.json @@ -0,0 +1,12 @@ +{ + "base_template": null, + "template": { + "name": "Agent_ListClientThenSite (csv) v1.1", + "template_css": "", + "template_md": "Client,Site,Hostname,Operating System,Last Boot Time,Offline Time (minutes),Overdue Time (minutes),Needs Reboot\n{% for agent in data_sources.agents %}{{ agent.site__client__name }},{{ agent.site__name }},{{ agent.hostname }},{{ agent.operating_system }},{% if agent.boot_time %}{{ (agent.boot_time | int) / 86400 + 25569 }}{% else %}Unknown{% endif %},{{ agent.offline_time if agent.offline_time else 0 }},{{ agent.overdue_time if agent.overdue_time else 0 }},{{ agent.needs_reboot }}\n{% endfor %}", + "type": "plaintext", + "depends_on": [], + "template_variables": "data_sources:\n agents:\n model: agent\n only:\n - site__client__name\n - site__name\n - hostname\n - operating_system\n - boot_time\n - offline_time\n - overdue_time\n - needs_reboot\n order_by: \n - -site__client__name\n - site__name\n - hostname\n select_related:\n - site\n - site__client" + }, + "assets": [] +} \ No newline at end of file diff --git a/templates/Agent_ListClientThenSite (csv).json b/templates/Agent_ListClientThenSite (csv).json deleted file mode 100644 index 4df95d6..0000000 --- a/templates/Agent_ListClientThenSite (csv).json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "base_template": null, - "template": { - "name": "Agent_ListClientThenSite (csv)", - "template_css": "", - "template_md": "{{ data_sources.agents }}", - "type": "plaintext", - "depends_on": [], - "template_variables": "data_sources:\n agents:\n model: agent\n only:\n - site__client__name\n - site__name\n - hostname\n - operating_system\n order_by: \n - -site__client__name\n - site__name\n - hostname\n select_related:\n - site\n - site__client\n csv: \n site__client__name: Client\n site__name: Site\n hostname: Hostname\n operating_system: Operating System" - }, - "assets": [] -} \ No newline at end of file From 22f2cf41a3242bdde8742004d1fac4a6ba9c17fe Mon Sep 17 00:00:00 2001 From: silversword411 Date: Wed, 25 Feb 2026 22:02:07 -0500 Subject: [PATCH 5/6] NoneType is not iterable Fixing reports --- ... Log (csv).json => All Fields - Audit Log (csv) v1.1.json} | 4 ++-- ...Machine Specs (csv).json => Machine Specs (csv) v1.1.json} | 4 ++-- ...gent (csv).json => Software List_By Agent (csv) v1.1.json} | 4 ++-- ...sv).json => Software Report Full_By Agent (csv) v1.1.json} | 4 ++-- ...v).json => Software Report Full_By Client (csv) v1.1.json} | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) rename templates/{All Fields - Audit Log (csv).json => All Fields - Audit Log (csv) v1.1.json} (86%) rename templates/{Machine Specs (csv).json => Machine Specs (csv) v1.1.json} (76%) rename templates/{Software List_By Agent (csv).json => Software List_By Agent (csv) v1.1.json} (57%) rename templates/{Software Report Full_By Agent (csv).json => Software Report Full_By Agent (csv) v1.1.json} (68%) rename templates/{Software Report Full_By Client (csv).json => Software Report Full_By Client (csv) v1.1.json} (68%) diff --git a/templates/All Fields - Audit Log (csv).json b/templates/All Fields - Audit Log (csv) v1.1.json similarity index 86% rename from templates/All Fields - Audit Log (csv).json rename to templates/All Fields - Audit Log (csv) v1.1.json index d48743f..19b14db 100644 --- a/templates/All Fields - Audit Log (csv).json +++ b/templates/All Fields - Audit Log (csv) v1.1.json @@ -1,9 +1,9 @@ { "base_template": null, "template": { - "name": "All Fields - Audit Log (csv)", + "name": "All Fields - Audit Log (csv) v1.1", "template_css": "", - "template_md": "id, username, agent, agent_id, entry_time, action, object_type, before_value, after_value, message, debug_info, debug_info.ip\r\n{% for item in data_sources.allFieldsAuditLog %}{{ item.id }}, {{ item.username }}, {{ item.agent }}, {{ item.agent_id }}, {{ item.entry_time }}, {{ item.action }}, {{ item.object_type }}, {{ item.before_value }}, {{ item.after_value }}, {{ item.message }}, {{ item.debug_info }}, {{ item.debug_info.ip }}\r\n{% endfor %}", + "template_md": "id, username, agent, agent_id, entry_time, action, object_type, before_value, after_value, message, debug_info, debug_info.ip\r\n{% for item in data_sources.allFieldsAuditLog %}{{ item.id }}, {{ item.username }}, {{ item.agent }}, {{ item.agent_id }}, {{ item.entry_time }}, {{ item.action }}, {{ item.object_type }}, {{ item.before_value }}, {{ item.after_value }}, {{ item.message }}, {{ item.debug_info }}, {{ item.debug_info.ip if item.debug_info else 'N/A' }}\r\n{% endfor %}", "type": "plaintext", "depends_on": [], "template_variables": "data_sources:\n allFieldsAuditLog:\n limit: 1000\n model: auditlog\n" diff --git a/templates/Machine Specs (csv).json b/templates/Machine Specs (csv) v1.1.json similarity index 76% rename from templates/Machine Specs (csv).json rename to templates/Machine Specs (csv) v1.1.json index 00c7f9b..04042d6 100644 --- a/templates/Machine Specs (csv).json +++ b/templates/Machine Specs (csv) v1.1.json @@ -1,9 +1,9 @@ { "base_template": null, "template": { - "name": "Machine Specs (csv)", + "name": "Machine Specs (csv) v1.1", "template_css": "", - "template_md": "Device Name, User, Device OS, CPU, RAM, HDD \r\n{% for item in data_sources.agents %}{{item.hostname if item.hostname else 'N/A'}},{{item.last_logged_in_user if item.last_logged_in_user else 'N/A'}},{{item.operating_system|replace(\",\", \"\") if item.operating_system else 'N/A'}},{{item.wmi_detail.cpu[0][0].Name if item.wmi_detail and item.wmi_detail.cpu and item.wmi_detail.cpu[0][0].Name else 'N/A'}},{{item.total_ram if item.total_ram else 'N/A'}} GB,{% for disk in item.disks %}{% if not loop.previtem or loop.previtem.device != disk.device %}{{disk.device}} {{disk.total}},{% endif %}{% else %}N/A,{% endfor %}\r\n{% endfor %}", + "template_md": "Device Name, User, Device OS, CPU, RAM, HDD \r\n{% for item in data_sources.agents %}{{item.hostname if item.hostname else 'N/A'}},{{item.last_logged_in_user if item.last_logged_in_user else 'N/A'}},{{item.operating_system|replace(\",\", \"\") if item.operating_system else 'N/A'}},{{item.wmi_detail.cpu[0][0].Name if item.wmi_detail and item.wmi_detail.cpu and item.wmi_detail.cpu[0][0].Name else 'N/A'}},{{item.total_ram if item.total_ram else 'N/A'}} GB,{% for disk in item.disks | default([]) %}{% if not loop.previtem or loop.previtem.device != disk.device %}{{disk.device}} {{disk.total}},{% endif %}{% else %}N/A,{% endfor %}\r\n{% endfor %}", "type": "plaintext", "depends_on": [ "client" diff --git a/templates/Software List_By Agent (csv).json b/templates/Software List_By Agent (csv) v1.1.json similarity index 57% rename from templates/Software List_By Agent (csv).json rename to templates/Software List_By Agent (csv) v1.1.json index 683d5a6..b873956 100644 --- a/templates/Software List_By Agent (csv).json +++ b/templates/Software List_By Agent (csv) v1.1.json @@ -1,9 +1,9 @@ { "base_template": null, "template": { - "name": "Software List_By Agent (csv)", + "name": "Software List_By Agent (csv) v1.1", "template_css": "", - "template_md": "Client, Agent, Software Name, Version, Publisher\r\n\r\n{% for record in data_sources.agentSoftware %}{% for software in record.software %}{% if software.name.startswith(software_name) %}{% if software.version != target_version %}{% endif %}{{ record.agent__site__client__name }}, {{ record.agent__hostname }}, {{ software.name }}, {{ software.version }}, {{ software.publisher }}\r\n{% endif %}{% endfor %}{% endfor %}", + "template_md": "Client, Agent, Software Name, Version, Publisher\r\n{% for record in data_sources.agentSoftware %}{% for software in record.software | default([]) %}{% if software.name.startswith(software_name) %}{% if software.version.startswith(target_version) %}{{ record.agent__site__client__name }}, {{ record.agent__hostname }}, {{ software.name }}, {{ software.version }}, {{ software.publisher }}\r\n{% endif %}{% endif %}{% endfor %}{% endfor %}", "type": "plaintext", "depends_on": [ "software_name", diff --git a/templates/Software Report Full_By Agent (csv).json b/templates/Software Report Full_By Agent (csv) v1.1.json similarity index 68% rename from templates/Software Report Full_By Agent (csv).json rename to templates/Software Report Full_By Agent (csv) v1.1.json index 51919dc..e332c07 100644 --- a/templates/Software Report Full_By Agent (csv).json +++ b/templates/Software Report Full_By Agent (csv) v1.1.json @@ -1,9 +1,9 @@ { "base_template": null, "template": { - "name": "Software Report Full_By Agent (csv)", + "name": "Software Report Full_By Agent (csv) v1.1", "template_css": "", - "template_md": "Software Audit Report - {{agent.hostname}}\r\nSoftware Name, Version, Publisher\r\n{% for record in data_sources.agentSoftware %}{% for software in record.software %}{{ software.name or 'N/A' }}, {{ software.version or 'N/A' }}, {{ software.publisher or 'N/A' }}\r\n{% endfor %}{% endfor %}", + "template_md": "Software Audit Report - {{agent.hostname}}\r\nSoftware Name, Version, Publisher\r\n{% for record in data_sources.agentSoftware %}{% for software in record.software | default([]) %}{{ software.name or 'N/A' }}, {{ software.version or 'N/A' }}, {{ software.publisher or 'N/A' }}\r\n{% endfor %}{% endfor %}", "type": "plaintext", "depends_on": [ "agent" diff --git a/templates/Software Report Full_By Client (csv).json b/templates/Software Report Full_By Client (csv) v1.1.json similarity index 68% rename from templates/Software Report Full_By Client (csv).json rename to templates/Software Report Full_By Client (csv) v1.1.json index e6a1b59..2cf2af3 100644 --- a/templates/Software Report Full_By Client (csv).json +++ b/templates/Software Report Full_By Client (csv) v1.1.json @@ -1,9 +1,9 @@ { "base_template": null, "template": { - "name": "Software Report Full_By Client (csv)", + "name": "Software Report Full_By Client (csv) v1.1", "template_css": "", - "template_md": "Device Name, Software Name, Version, Publisher\r\n{% for record in data_sources.agentSoftware %}{% for software in record.software %}{{ record.agent__hostname or 'N/A' }}, {{ software.name or 'N/A' }}, {{ software.version or 'N/A' }}, {{ software.publisher or 'N/A' }}\r\n{% endfor %}{% endfor %}", + "template_md": "Device Name, Software Name, Version, Publisher\r\n{% for record in data_sources.agentSoftware %}{% for software in record.software | default([]) %}{{ record.agent__hostname or 'N/A' }}, {{ software.name or 'N/A' }}, {{ software.version or 'N/A' }}, {{ software.publisher or 'N/A' }}\r\n{% endfor %}{% endfor %}", "type": "plaintext", "depends_on": [ "client" From 96bbb170f624240e24a9d6b6d325343d9bbc8a24 Mon Sep 17 00:00:00 2001 From: silversword411 Date: Wed, 25 Feb 2026 22:23:59 -0500 Subject: [PATCH 6/6] Fixing name convention and index --- index.json | 32 +++++++++---------- ...ced DataTables_By Client (html) v1.2.json} | 6 ++-- 2 files changed, 19 insertions(+), 19 deletions(-) rename templates/{Software Report - Advanced DataTables.json => Software Report - Advanced DataTables_By Client (html) v1.2.json} (66%) diff --git a/index.json b/index.json index dae30d6..32d9b70 100644 --- a/index.json +++ b/index.json @@ -12,8 +12,8 @@ "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20List_By%20Client%20%28pdf%29.json" }, { - "name": "Agent List_By Client with Specs (pdf) v1.3", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20List_By%20Client%20with%20Specs%20%28pdf%29%20v1.3.json" + "name": "Agent List_By Client with Specs (pdf) v1.6", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20List_By%20Client%20with%20Specs%20%28pdf%29%20v1.6.json" }, { "name": "Agent Specs (md)", @@ -28,8 +28,8 @@ "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent%20Uptime_By%20Client%20%28html%29%20v1.5.json" }, { - "name": "Agent_ListClientThenSite (csv)", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent_ListClientThenSite%20%28csv%29.json" + "name": "Agent_ListClientThenSite (csv) v1.1", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Agent_ListClientThenSite%20%28csv%29%20v1.1.json" }, { "name": "Agent_ListClientThenSite-alt (csv)", @@ -80,8 +80,8 @@ "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/All%20Fields%20-%20Audit%20Log.json" }, { - "name": "All Fields - Audit Log (csv)", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/All%20Fields%20-%20Audit%20Log%20%28csv%29.json" + "name": "All Fields - Audit Log (csv) v1.1", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/All%20Fields%20-%20Audit%20Log%20%28csv%29%20v1.1.json" }, { "name": "All Fields - Automated Tasks", @@ -168,8 +168,8 @@ "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Device%20Inventory%20Report%20-%20Advanced%20DataTables%20v1.9.json" }, { - "name": "Machine Specs (csv)", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Machine%20Specs%20%28csv%29.json" + "name": "Machine Specs (csv) v1.1", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Machine%20Specs%20%28csv%29%20v1.1.json" }, { "name": "NOC Dashboard v1.31", @@ -188,24 +188,24 @@ "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Inventory_By%20Software%20Name.json" }, { - "name": "Software List_By Agent (csv)", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20List_By%20Agent%20%28csv%29.json" + "name": "Software List_By Agent (csv) v1.1", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20List_By%20Agent%20%28csv%29%20v1.1.json" }, { - "name": "Software Report - Advanced DataTables", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20-%20Advanced%20DataTables.json" + "name": "Software Report - Advanced DataTables_By Client (html) v1.2", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20-%20Advanced%20DataTables_By%20Client%20%28html%29%20v1.2.json" }, { - "name": "Software Report Full_By Agent (csv)", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Full_By%20Agent%20%28csv%29.json" + "name": "Software Report Full_By Agent (csv) v1.1", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Full_By%20Agent%20%28csv%29%20v1.1.json" }, { "name": "Software Report Full_By Agent (md)", "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Full_By%20Agent%20%28md%29.json" }, { - "name": "Software Report Full_By Client (csv)", - "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Full_By%20Client%20%28csv%29.json" + "name": "Software Report Full_By Client (csv) v1.1", + "download_url": "https://raw.githubusercontent.com/amidaware/reporting-templates/master/templates/Software%20Report%20Full_By%20Client%20%28csv%29%20v1.1.json" }, { "name": "Software Report Full_By Client (md)", diff --git a/templates/Software Report - Advanced DataTables.json b/templates/Software Report - Advanced DataTables_By Client (html) v1.2.json similarity index 66% rename from templates/Software Report - Advanced DataTables.json rename to templates/Software Report - Advanced DataTables_By Client (html) v1.2.json index 959fde7..6b2c422 100644 --- a/templates/Software Report - Advanced DataTables.json +++ b/templates/Software Report - Advanced DataTables_By Client (html) v1.2.json @@ -1,9 +1,9 @@ { "base_template": null, "template": { - "name": "Software Report - Advanced DataTables", + "name": "Software Report - Advanced DataTables_By Client (html) v1.2", "template_css": "", - "template_md": "\r\n\r\n\r\n \r\n \r\n {{ client.name }} | Software Inventory Report\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n

{{ client.name }}'s Software Inventory Report

\r\n

Below is a list of all software currently installed on computers in your organization. This data was exported on {{datetime.date.today()}} and may not reflect the current status.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Loading...
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% for data in data_sources.agentSoftware %}\r\n {% for software in data.software %}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% endfor %}\r\n {% else %}\r\n \r\n \r\n \r\n {% endfor %}\r\n \r\n
HostnameLast UserSite NameSoftware NamePublisherInstall Date
{{ data.agent__hostname }}{{ data.agent__last_logged_in_user }}{{ data.agent__site__name }}{{ software.name }}{{ software.publisher }}{{ software.install_date }}
No software found.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n", + "template_md": "\r\n\r\n\r\n \r\n \r\n {{ client.name }} | Software Inventory Report\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n

{{ client.name }}'s Software Inventory Report

\r\n

Below is a list of all software currently installed on computers in your organization. This data was exported on {{datetime.date.today()}} and may not reflect the current status.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Loading...
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% for data in data_sources.agentSoftware %}\r\n {% for software in data.software | default([]) %}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {% endfor %}\r\n {% else %}\r\n \r\n \r\n \r\n {% endfor %}\r\n \r\n
HostnameLast UserSite NameSoftware NamePublisherInstall Date
{{ data.agent__hostname }}{{ data.agent__last_logged_in_user }}{{ data.agent__site__name }}{{ software.name }}{{ software.publisher }}{{ software.install_date }}
No software found.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n", "type": "html", "depends_on": [ "client" @@ -11,4 +11,4 @@ "template_variables": "data_sources:\r\n agentSoftware:\r\n model: installedsoftware\r\n filter:\r\n agent__site__client__id: \"{{client.id}}\"\r\n only:\r\n - software\r\n - agent__hostname\r\n - agent__site__name\r\n - agent__site__client\r\n - agent__last_logged_in_user" }, "assets": [] -} +} \ No newline at end of file