diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 8d7f5f6e5c..422239f361 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -8,7 +8,7 @@ services: build: context: .. dockerfile: .devcontainer/api.dockerfile - command: ["tactical-api"] + command: [ "tactical-api" ] environment: API_PORT: ${API_PORT} ports: @@ -18,14 +18,15 @@ services: - ..:/workspace:cached networks: dev: - aliases: + aliases: - tactical-backend app-dev: container_name: trmm-app-dev image: node:14-alpine restart: always - command: /bin/sh -c "npm install npm@latest -g && npm install && npm run serve -- --host 0.0.0.0 --port ${APP_PORT}" + command: /bin/sh -c "npm install npm@latest -g && npm install && npm run serve + -- --host 0.0.0.0 --port ${APP_PORT}" working_dir: /workspace/web volumes: - ..:/workspace:cached @@ -33,7 +34,7 @@ services: - "8080:${APP_PORT}" networks: dev: - aliases: + aliases: - tactical-frontend # nats @@ -61,7 +62,7 @@ services: container_name: trmm-meshcentral-dev image: ${IMAGE_REPO}tactical-meshcentral:${VERSION} restart: always - environment: + environment: MESH_HOST: ${MESH_HOST} MESH_USER: ${MESH_USER} MESH_PASS: ${MESH_PASS} @@ -117,7 +118,7 @@ services: restart: always command: redis-server --appendonly yes image: redis:6.0-alpine - volumes: + volumes: - redis-data-dev:/data networks: dev: @@ -128,7 +129,7 @@ services: container_name: trmm-init-dev image: api-dev restart: on-failure - command: ["tactical-init-dev"] + command: [ "tactical-init-dev" ] environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASS: ${POSTGRES_PASS} @@ -153,7 +154,7 @@ services: celery-dev: container_name: trmm-celery-dev image: api-dev - command: ["tactical-celery-dev"] + command: [ "tactical-celery-dev" ] restart: always networks: - dev @@ -168,7 +169,7 @@ services: celerybeat-dev: container_name: trmm-celerybeat-dev image: api-dev - command: ["tactical-celerybeat-dev"] + command: [ "tactical-celerybeat-dev" ] restart: always networks: - dev @@ -183,7 +184,7 @@ services: websockets-dev: container_name: trmm-websockets-dev image: api-dev - command: ["tactical-websockets-dev"] + command: [ "tactical-websockets-dev" ] restart: always networks: dev: @@ -223,7 +224,7 @@ services: container_name: trmm-mkdocs-dev image: api-dev restart: always - command: ["tactical-mkdocs-dev"] + command: [ "tactical-mkdocs-dev" ] ports: - "8005:8005" volumes: @@ -232,11 +233,11 @@ services: - dev volumes: - tactical-data-dev: - postgres-data-dev: - mongo-dev-data: - mesh-data-dev: - redis-data-dev: + tactical-data-dev: null + postgres-data-dev: null + mongo-dev-data: null + mesh-data-dev: null + redis-data-dev: null networks: dev: diff --git a/.devcontainer/entrypoint.sh b/.devcontainer/entrypoint.sh index b977f952e7..a22dbdba6d 100644 --- a/.devcontainer/entrypoint.sh +++ b/.devcontainer/entrypoint.sh @@ -9,7 +9,8 @@ set -e : "${POSTGRES_USER:=tactical}" : "${POSTGRES_PASS:=tactical}" : "${POSTGRES_DB:=tacticalrmm}" -: "${MESH_CONTAINER:=tactical-meshcentral}" +: "${MESH_SERVICE:=tactical-meshcentral}" +: "${MESH_WS_URL:=ws://${MESH_SERVICE}:443}" : "${MESH_USER:=meshcentral}" : "${MESH_PASS:=meshcentralpass}" : "${MESH_HOST:=tactical-meshcentral}" @@ -20,6 +21,9 @@ set -e : "${APP_PORT:=8080}" : "${API_PORT:=8000}" +: "${CERT_PRIV_PATH:=${TACTICAL_DIR}/certs/privkey.pem}" +: "${CERT_PUB_PATH:=${TACTICAL_DIR}/certs/fullchain.pem}" + # Add python venv to path export PATH="${VIRTUAL_ENV}/bin:$PATH" @@ -37,7 +41,7 @@ function django_setup { sleep 5 done - until (echo > /dev/tcp/"${MESH_CONTAINER}"/443) &> /dev/null; do + until (echo > /dev/tcp/"${MESH_SERVICE}"/443) &> /dev/null; do echo "waiting for meshcentral container to be ready..." sleep 5 done @@ -56,8 +60,8 @@ DEBUG = True DOCKER_BUILD = True -CERT_FILE = '/opt/tactical/certs/fullchain.pem' -KEY_FILE = '/opt/tactical/certs/privkey.pem' +CERT_FILE = '${CERT_PUB_PATH}' +KEY_FILE = '${CERT_PRIV_PATH}' SCRIPTS_DIR = '${WORKSPACE_DIR}/scripts' @@ -82,6 +86,7 @@ MESH_USERNAME = '${MESH_USER}' MESH_SITE = 'https://${MESH_HOST}' MESH_TOKEN_KEY = '${MESH_TOKEN}' REDIS_HOST = '${REDIS_HOST}' +MESH_WS_URL = '${MESH_WS_URL}' ADMIN_ENABLED = True EOF )" @@ -98,6 +103,8 @@ EOF "${VIRTUAL_ENV}"/bin/python manage.py reload_nats "${VIRTUAL_ENV}"/bin/python manage.py create_natsapi_conf "${VIRTUAL_ENV}"/bin/python manage.py create_installer_user + "${VIRTUAL_ENV}"/bin/python manage.py post_update_tasks + # create super user echo "from accounts.models import User; User.objects.create_superuser('${TRMM_USER}', 'admin@example.com', '${TRMM_PASS}') if not User.objects.filter(username='${TRMM_USER}').exists() else 0;" | python manage.py shell diff --git a/.devcontainer/requirements.txt b/.devcontainer/requirements.txt index 10ac780896..64a0d989f8 100644 --- a/.devcontainer/requirements.txt +++ b/.devcontainer/requirements.txt @@ -4,7 +4,7 @@ celery channels channels_redis django-ipware -Django +Django==3.2.10 django-cors-headers django-rest-knox djangorestframework @@ -36,3 +36,4 @@ mypy pysnooper isort drf_spectacular +pandas diff --git a/api/tacticalrmm/.coveragerc b/api/tacticalrmm/.coveragerc index 6245fc7c38..83bb73737a 100644 --- a/api/tacticalrmm/.coveragerc +++ b/api/tacticalrmm/.coveragerc @@ -21,4 +21,6 @@ omit = */tests.py */test.py checks/utils.py + */asgi.py + */demo_views.py diff --git a/api/tacticalrmm/accounts/views.py b/api/tacticalrmm/accounts/views.py index 046670319d..8e6fed890c 100644 --- a/api/tacticalrmm/accounts/views.py +++ b/api/tacticalrmm/accounts/views.py @@ -25,11 +25,15 @@ def _is_root_user(request, user) -> bool: - return ( + root = ( hasattr(settings, "ROOT_USER") and request.user != user and user.username == settings.ROOT_USER ) + demo = ( + getattr(settings, "DEMO", False) and request.user.username == settings.ROOT_USER + ) + return root or demo class CheckCreds(KnoxLoginView): @@ -80,6 +84,8 @@ def post(self, request, format=None): if settings.DEBUG and token == "sekret": valid = True + elif getattr(settings, "DEMO", False): + valid = True elif totp.verify(token, valid_window=10): valid = True diff --git a/api/tacticalrmm/agents/management/commands/demo_cron.py b/api/tacticalrmm/agents/management/commands/demo_cron.py new file mode 100644 index 0000000000..4e718faafd --- /dev/null +++ b/api/tacticalrmm/agents/management/commands/demo_cron.py @@ -0,0 +1,37 @@ +# import datetime as dt +import random + +from django.core.management.base import BaseCommand +from django.utils import timezone as djangotime +from agents.models import Agent + + +class Command(BaseCommand): + help = "stuff for demo site in cron" + + def handle(self, *args, **kwargs): + + random_dates = [] + + for _ in range(20): + rand = djangotime.now() - djangotime.timedelta(minutes=random.randint(1, 2)) + random_dates.append(rand) + + for _ in range(5): + rand = djangotime.now() - djangotime.timedelta( + minutes=random.randint(10, 20) + ) + random_dates.append(rand) + + """ for _ in range(5): + rand = djangotime.now() - djangotime.timedelta(hours=random.randint(1, 10)) + random_dates.append(rand) + + for _ in range(5): + rand = djangotime.now() - djangotime.timedelta(days=random.randint(40, 90)) + random_dates.append(rand) """ + + agents = Agent.objects.only("last_seen") + for agent in agents: + agent.last_seen = random.choice(random_dates) + agent.save(update_fields=["last_seen"]) diff --git a/api/tacticalrmm/agents/management/commands/fake_agents.py b/api/tacticalrmm/agents/management/commands/fake_agents.py new file mode 100644 index 0000000000..9c8cda11d3 --- /dev/null +++ b/api/tacticalrmm/agents/management/commands/fake_agents.py @@ -0,0 +1,668 @@ +import json +import random +import string +import datetime as dt + +from django.core.management.base import BaseCommand +from django.utils import timezone as djangotime +from django.conf import settings + +from accounts.models import User +from agents.models import Agent, AgentHistory +from clients.models import Client, Site +from software.models import InstalledSoftware +from winupdate.models import WinUpdate, WinUpdatePolicy +from checks.models import Check, CheckHistory +from scripts.models import Script +from autotasks.models import AutomatedTask +from automation.models import Policy +from logs.models import PendingAction, AuditLog + +from tacticalrmm.demo_data import ( + disks, + temp_dir_stdout, + spooler_stdout, + ping_fail_output, + ping_success_output, +) + +AGENTS_TO_GENERATE = 250 + +SVCS = settings.BASE_DIR.joinpath("tacticalrmm/test_data/winsvcs.json") +WMI_1 = settings.BASE_DIR.joinpath("tacticalrmm/test_data/wmi1.json") +WMI_2 = settings.BASE_DIR.joinpath("tacticalrmm/test_data/wmi2.json") +WMI_3 = settings.BASE_DIR.joinpath("tacticalrmm/test_data/wmi3.json") +SW_1 = settings.BASE_DIR.joinpath("tacticalrmm/test_data/software1.json") +SW_2 = settings.BASE_DIR.joinpath("tacticalrmm/test_data/software2.json") +WIN_UPDATES = settings.BASE_DIR.joinpath("tacticalrmm/test_data/winupdates.json") +EVT_LOG_FAIL = settings.BASE_DIR.joinpath( + "tacticalrmm/test_data/eventlog_check_fail.json" +) + + +class Command(BaseCommand): + help = "populate database with fake agents" + + def rand_string(self, length): + chars = string.ascii_letters + return "".join(random.choice(chars) for _ in range(length)) + + def handle(self, *args, **kwargs): + + user = User.objects.first() + user.totp_key = "ABSA234234" + user.save(update_fields=["totp_key"]) + + Client.objects.all().delete() + Agent.objects.all().delete() + Check.objects.all().delete() + Script.objects.all().delete() + AutomatedTask.objects.all().delete() + CheckHistory.objects.all().delete() + Policy.objects.all().delete() + AuditLog.objects.all().delete() + PendingAction.objects.all().delete() + + Script.load_community_scripts() + + # policies + check_policy = Policy() + check_policy.name = "Demo Checks Policy" + check_policy.desc = "Demo Checks Policy" + check_policy.active = True + check_policy.enforced = True + check_policy.save() + + patch_policy = Policy() + patch_policy.name = "Demo Patch Policy" + patch_policy.desc = "Demo Patch Policy" + patch_policy.active = True + patch_policy.enforced = True + patch_policy.save() + + update_policy = WinUpdatePolicy() + update_policy.policy = patch_policy + update_policy.critical = "approve" + update_policy.important = "approve" + update_policy.moderate = "approve" + update_policy.low = "ignore" + update_policy.other = "ignore" + update_policy.run_time_days = [6, 0, 2] + update_policy.run_time_day = 1 + update_policy.reboot_after_install = "required" + update_policy.reprocess_failed = True + update_policy.email_if_fail = True + update_policy.save() + + clients = [ + "Company 2", + "Company 3", + "Company 1", + "Company 4", + "Company 5", + "Company 6", + ] + sites1 = ["HQ1", "LA Office 1", "NY Office 1"] + sites2 = ["HQ2", "LA Office 2", "NY Office 2"] + sites3 = ["HQ3", "LA Office 3", "NY Office 3"] + sites4 = ["HQ4", "LA Office 4", "NY Office 4"] + sites5 = ["HQ5", "LA Office 5", "NY Office 5"] + sites6 = ["HQ6", "LA Office 6", "NY Office 6"] + + client1 = Client(name="Company 1") + client2 = Client(name="Company 2") + client3 = Client(name="Company 3") + client4 = Client(name="Company 4") + client5 = Client(name="Company 5") + client6 = Client(name="Company 6") + + client1.save() + client2.save() + client3.save() + client4.save() + client5.save() + client6.save() + + for site in sites1: + Site(client=client1, name=site).save() + + for site in sites2: + Site(client=client2, name=site).save() + + for site in sites3: + Site(client=client3, name=site).save() + + for site in sites4: + Site(client=client4, name=site).save() + + for site in sites5: + Site(client=client5, name=site).save() + + for site in sites6: + Site(client=client6, name=site).save() + + hostnames = [ + "DC-1", + "DC-2", + "FSV-1", + "FSV-2", + "WSUS", + "DESKTOP-12345", + "LAPTOP-55443", + ] + descriptions = ["Bob's computer", "Primary DC", "File Server", "Karen's Laptop"] + modes = ["server", "workstation"] + op_systems_servers = [ + "Microsoft Windows Server 2016 Standard, 64bit (build 14393)", + "Microsoft Windows Server 2012 R2 Standard, 64bit (build 9600)", + "Microsoft Windows Server 2019 Standard, 64bit (build 17763)", + ] + + op_systems_workstations = [ + "Microsoft Windows 8.1 Pro, 64bit (build 9600)", + "Microsoft Windows 10 Pro for Workstations, 64bit (build 18363)", + "Microsoft Windows 10 Pro, 64bit (build 18363)", + ] + + public_ips = ["65.234.22.4", "74.123.43.5", "44.21.134.45"] + + total_rams = [4, 8, 16, 32, 64, 128] + used_rams = [10, 13, 60, 25, 76, 34, 56, 34, 39] + + now = dt.datetime.now() + + boot_times = [] + + for _ in range(15): + rand_hour = now - dt.timedelta(hours=random.randint(1, 22)) + boot_times.append(str(rand_hour.timestamp())) + + for _ in range(5): + rand_days = now - dt.timedelta(days=random.randint(2, 50)) + boot_times.append(str(rand_days.timestamp())) + + user_names = ["None", "Karen", "Steve", "jsmith", "jdoe"] + + with open(SVCS) as f: + services = json.load(f) + + # WMI + with open(WMI_1) as f: + wmi1 = json.load(f) + + with open(WMI_2) as f: + wmi2 = json.load(f) + + with open(WMI_3) as f: + wmi3 = json.load(f) + + wmi_details = [] + wmi_details.append(wmi1) + wmi_details.append(wmi2) + wmi_details.append(wmi3) + + # software + with open(SW_1) as f: + software1 = json.load(f) + + with open(SW_2) as f: + software2 = json.load(f) + + softwares = [] + softwares.append(software1) + softwares.append(software2) + + # windows updates + with open(WIN_UPDATES) as f: + windows_updates = json.load(f)["samplecomputer"] + + # event log check fail data + with open(EVT_LOG_FAIL) as f: + eventlog_check_fail_data = json.load(f) + + # create scripts + + clear_spool = Script() + clear_spool.name = "Clear Print Spooler" + clear_spool.description = "clears the print spooler. Fuck printers" + clear_spool.filename = "clear_print_spool.bat" + clear_spool.shell = "cmd" + clear_spool.save() + + check_net_aware = Script() + check_net_aware.name = "Check Network Location Awareness" + check_net_aware.description = "Check's network location awareness on domain computers, should always be domain profile and not public or private. Sometimes happens when computer restarts before domain available. This script will return 0 if check passes or 1 if it fails." + check_net_aware.filename = "check_network_loc_aware.ps1" + check_net_aware.shell = "powershell" + check_net_aware.save() + + check_pool_health = Script() + check_pool_health.name = "Check storage spool health" + check_pool_health.description = "loops through all storage pools and will fail if any of them are not healthy" + check_pool_health.filename = "check_storage_pool_health.ps1" + check_pool_health.shell = "powershell" + check_pool_health.save() + + restart_nla = Script() + restart_nla.name = "Restart NLA Service" + restart_nla.description = "restarts the Network Location Awareness windows service to fix the nic profile. Run this after the check network service fails" + restart_nla.filename = "restart_nla.ps1" + restart_nla.shell = "powershell" + restart_nla.save() + + show_tmp_dir_script = Script() + show_tmp_dir_script.name = "Check temp dir" + show_tmp_dir_script.description = "shows files in temp dir using python" + show_tmp_dir_script.filename = "show_temp_dir.py" + show_tmp_dir_script.shell = "python" + show_tmp_dir_script.save() + + for count_agents in range(AGENTS_TO_GENERATE): + + client = random.choice(clients) + + if client == "Company 1": + site = random.choice(sites1) + elif client == "Company 2": + site = random.choice(sites2) + elif client == "Company 3": + site = random.choice(sites3) + elif client == "Company 4": + site = random.choice(sites4) + elif client == "Company 5": + site = random.choice(sites5) + elif client == "Company 6": + site = random.choice(sites6) + + agent = Agent() + + mode = random.choice(modes) + if mode == "server": + agent.operating_system = random.choice(op_systems_servers) + else: + agent.operating_system = random.choice(op_systems_workstations) + + agent.hostname = random.choice(hostnames) + agent.version = settings.LATEST_AGENT_VER + agent.salt_ver = "1.1.0" + agent.site = Site.objects.get(name=site) + agent.agent_id = self.rand_string(25) + agent.description = random.choice(descriptions) + agent.monitoring_type = mode + agent.public_ip = random.choice(public_ips) + agent.last_seen = djangotime.now() + agent.plat = "windows" + agent.plat_release = "windows-2019Server" + agent.total_ram = random.choice(total_rams) + agent.used_ram = random.choice(used_rams) + agent.boot_time = random.choice(boot_times) + agent.logged_in_username = random.choice(user_names) + agent.antivirus = "windowsdefender" + agent.mesh_node_id = ( + "3UiLhe420@kaVQ0rswzBeonW$WY0xrFFUDBQlcYdXoriLXzvPmBpMrV99vRHXFlb" + ) + agent.overdue_email_alert = random.choice([True, False]) + agent.overdue_text_alert = random.choice([True, False]) + agent.needs_reboot = random.choice([True, False]) + agent.wmi_detail = random.choice(wmi_details) + agent.services = services + agent.disks = random.choice(disks) + agent.salt_id = "not-used" + + agent.save() + + InstalledSoftware(agent=agent, software=random.choice(softwares)).save() + + if mode == "workstation": + WinUpdatePolicy(agent=agent, run_time_days=[5, 6]).save() + else: + WinUpdatePolicy(agent=agent).save() + + # windows updates load + guids = [] + for k in windows_updates.keys(): + guids.append(k) + + for i in guids: + WinUpdate( + agent=agent, + guid=i, + kb=windows_updates[i]["KBs"][0], + mandatory=windows_updates[i]["Mandatory"], + title=windows_updates[i]["Title"], + needs_reboot=windows_updates[i]["NeedsReboot"], + installed=windows_updates[i]["Installed"], + downloaded=windows_updates[i]["Downloaded"], + description=windows_updates[i]["Description"], + severity=windows_updates[i]["Severity"], + ).save() + + # agent histories + hist = AgentHistory() + hist.agent = agent + hist.type = "cmd_run" + hist.command = "ping google.com" + hist.username = "demo" + hist.results = ping_success_output + hist.save() + + hist1 = AgentHistory() + hist1.agent = agent + hist1.type = "script_run" + hist1.script = clear_spool + hist1.script_results = { + "id": 1, + "stderr": "", + "stdout": spooler_stdout, + "execution_time": 3.5554593, + "retcode": 0, + } + hist1.save() + + # disk space check + check1 = Check() + check1.agent = agent + check1.check_type = "diskspace" + check1.status = "passing" + check1.last_run = djangotime.now() + check1.more_info = "Total: 498.7GB, Free: 287.4GB" + check1.warning_threshold = 25 + check1.error_threshold = 10 + check1.disk = "C:" + check1.email_alert = random.choice([True, False]) + check1.text_alert = random.choice([True, False]) + check1.save() + + for i in range(30): + check1_history = CheckHistory() + check1_history.check_id = check1.id + check1_history.x = djangotime.now() - djangotime.timedelta( + minutes=i * 2 + ) + check1_history.y = random.randint(13, 40) + check1_history.save() + + # ping check + check2 = Check() + check2.agent = agent + check2.check_type = "ping" + check2.last_run = djangotime.now() + check2.email_alert = random.choice([True, False]) + check2.text_alert = random.choice([True, False]) + + if site in sites5: + check2.name = "Synology NAS" + check2.status = "failing" + check2.ip = "172.17.14.26" + check2.more_info = ping_fail_output + else: + check2.name = "Google" + check2.status = "passing" + check2.ip = "8.8.8.8" + check2.more_info = ping_success_output + + check2.save() + + for i in range(30): + check2_history = CheckHistory() + check2_history.check_id = check2.id + check2_history.x = djangotime.now() - djangotime.timedelta( + minutes=i * 2 + ) + if site in sites5: + check2_history.y = 1 + check2_history.results = ping_fail_output + else: + check2_history.y = 0 + check2_history.results = ping_success_output + check2_history.save() + + # cpu load check + check3 = Check() + check3.agent = agent + check3.check_type = "cpuload" + check3.status = "passing" + check3.last_run = djangotime.now() + check3.warning_threshold = 70 + check3.error_threshold = 90 + check3.history = [15, 23, 16, 22, 22, 27, 15, 23, 23, 20, 10, 10, 13, 34] + check3.email_alert = random.choice([True, False]) + check3.text_alert = random.choice([True, False]) + check3.save() + + for i in range(30): + check3_history = CheckHistory() + check3_history.check_id = check3.id + check3_history.x = djangotime.now() - djangotime.timedelta( + minutes=i * 2 + ) + check3_history.y = random.randint(2, 79) + check3_history.save() + + # memory check + check4 = Check() + check4.agent = agent + check4.check_type = "memory" + check4.status = "passing" + check4.warning_threshold = 70 + check4.error_threshold = 85 + check4.history = [34, 34, 35, 36, 34, 34, 34, 34, 34, 34] + check4.email_alert = random.choice([True, False]) + check4.text_alert = random.choice([True, False]) + check4.save() + + for i in range(30): + check4_history = CheckHistory() + check4_history.check_id = check4.id + check4_history.x = djangotime.now() - djangotime.timedelta( + minutes=i * 2 + ) + check4_history.y = random.randint(2, 79) + check4_history.save() + + # script check storage pool + check5 = Check() + check5.agent = agent + check5.check_type = "script" + check5.status = "passing" + check5.last_run = djangotime.now() + check5.email_alert = random.choice([True, False]) + check5.text_alert = random.choice([True, False]) + check5.timeout = 120 + check5.retcode = 0 + check5.execution_time = "4.0000" + check5.script = check_pool_health + check5.save() + + for i in range(30): + check5_history = CheckHistory() + check5_history.check_id = check5.id + check5_history.x = djangotime.now() - djangotime.timedelta( + minutes=i * 2 + ) + if i == 10 or i == 18: + check5_history.y = 1 + else: + check5_history.y = 0 + check5_history.save() + + check6 = Check() + check6.agent = agent + check6.check_type = "script" + check6.status = "passing" + check6.last_run = djangotime.now() + check6.email_alert = random.choice([True, False]) + check6.text_alert = random.choice([True, False]) + check6.timeout = 120 + check6.retcode = 0 + check6.execution_time = "4.0000" + check6.script = check_net_aware + check6.save() + + for i in range(30): + check6_history = CheckHistory() + check6_history.check_id = check6.id + check6_history.x = djangotime.now() - djangotime.timedelta( + minutes=i * 2 + ) + check6_history.y = 0 + check6_history.save() + + nla_task = AutomatedTask() + nla_task.agent = agent + nla_task.script = restart_nla + nla_task.assigned_check = check6 + nla_task.name = "Restart NLA" + nla_task.task_type = "checkfailure" + nla_task.win_task_name = "demotask123" + nla_task.execution_time = "1.8443" + nla_task.last_run = djangotime.now() + nla_task.stdout = "no stdout" + nla_task.retcode = 0 + nla_task.sync_status = "synced" + nla_task.save() + + spool_task = AutomatedTask() + spool_task.agent = agent + spool_task.script = clear_spool + spool_task.name = "Clear the print spooler" + spool_task.task_type = "scheduled" + spool_task.run_time_bit_weekdays = 127 + spool_task.run_time_minute = "04:45" + spool_task.win_task_name = "demospool123" + spool_task.last_run = djangotime.now() + spool_task.retcode = 0 + spool_task.stdout = spooler_stdout + spool_task.sync_status = "synced" + spool_task.save() + + tmp_dir_task = AutomatedTask() + tmp_dir_task.agent = agent + tmp_dir_task.name = "show temp dir files" + tmp_dir_task.script = show_tmp_dir_script + tmp_dir_task.task_type = "manual" + tmp_dir_task.win_task_name = "demotemp" + tmp_dir_task.last_run = djangotime.now() + tmp_dir_task.stdout = temp_dir_stdout + tmp_dir_task.retcode = 0 + tmp_dir_task.sync_status = "synced" + tmp_dir_task.save() + + check7 = Check() + check7.agent = agent + check7.check_type = "script" + check7.status = "passing" + check7.last_run = djangotime.now() + check7.email_alert = random.choice([True, False]) + check7.text_alert = random.choice([True, False]) + check7.timeout = 120 + check7.retcode = 0 + check7.execution_time = "3.1337" + check7.script = clear_spool + check7.stdout = spooler_stdout + check7.save() + + for i in range(30): + check7_history = CheckHistory() + check7_history.check_id = check7.id + check7_history.x = djangotime.now() - djangotime.timedelta( + minutes=i * 2 + ) + check7_history.y = 0 + check7_history.save() + + check8 = Check() + check8.agent = agent + check8.check_type = "winsvc" + check8.status = "passing" + check8.last_run = djangotime.now() + check8.email_alert = random.choice([True, False]) + check8.text_alert = random.choice([True, False]) + check8.more_info = "Status RUNNING" + check8.fails_b4_alert = 4 + check8.svc_name = "Spooler" + check8.svc_display_name = "Print Spooler" + check8.pass_if_start_pending = False + check8.restart_if_stopped = True + check8.save() + + for i in range(30): + check8_history = CheckHistory() + check8_history.check_id = check8.id + check8_history.x = djangotime.now() - djangotime.timedelta( + minutes=i * 2 + ) + if i == 10 or i == 18: + check8_history.y = 1 + check8_history.results = "Status STOPPED" + else: + check8_history.y = 0 + check8_history.results = "Status RUNNING" + check8_history.save() + + check9 = Check() + check9.agent = agent + check9.check_type = "eventlog" + check9.name = "unexpected shutdown" + + check9.last_run = djangotime.now() + check9.email_alert = random.choice([True, False]) + check9.text_alert = random.choice([True, False]) + check9.fails_b4_alert = 2 + + if site in sites5: + check9.extra_details = eventlog_check_fail_data + check9.status = "failing" + else: + check9.extra_details = {"log": []} + check9.status = "passing" + + check9.log_name = "Application" + check9.event_id = 1001 + check9.event_type = "INFO" + check9.fail_when = "contains" + check9.search_last_days = 30 + + check9.save() + + for i in range(30): + check9_history = CheckHistory() + check9_history.check_id = check9.id + check9_history.x = djangotime.now() - djangotime.timedelta( + minutes=i * 2 + ) + if i == 10 or i == 18: + check9_history.y = 1 + check9_history.results = "Events Found: 16" + else: + check9_history.y = 0 + check9_history.results = "Events Found: 0" + check9_history.save() + + pick = random.randint(1, 10) + + if pick == 5 or pick == 3: + + reboot_time = djangotime.now() + djangotime.timedelta( + minutes=random.randint(1000, 500000) + ) + date_obj = dt.datetime.strftime(reboot_time, "%Y-%m-%d %H:%M") + + obj = dt.datetime.strptime(date_obj, "%Y-%m-%d %H:%M") + + task_name = "TacticalRMM_SchedReboot_" + "".join( + random.choice(string.ascii_letters) for _ in range(10) + ) + + sched_reboot = PendingAction() + sched_reboot.agent = agent + sched_reboot.action_type = "schedreboot" + sched_reboot.details = { + "time": str(obj), + "taskname": task_name, + } + sched_reboot.save() + + self.stdout.write(self.style.SUCCESS(f"Added agent # {count_agents + 1}")) + + self.stdout.write("done") diff --git a/api/tacticalrmm/agents/tasks.py b/api/tacticalrmm/agents/tasks.py index bd98daad93..26f933ec51 100644 --- a/api/tacticalrmm/agents/tasks.py +++ b/api/tacticalrmm/agents/tasks.py @@ -4,7 +4,6 @@ from time import sleep from typing import Union -from alerts.models import Alert from core.models import CoreSettings from django.conf import settings from django.utils import timezone as djangotime @@ -15,7 +14,6 @@ from agents.models import Agent from agents.utils import get_winagent_url -from tacticalrmm.utils import AGENT_DEFER def agent_update(agent_id: str, force: bool = False) -> str: @@ -308,43 +306,3 @@ def prune_agent_history(older_than_days: int) -> str: ).delete() return "ok" - - -@app.task -def handle_agents_task() -> None: - q = Agent.objects.defer(*AGENT_DEFER) - agents = [ - i - for i in q - if pyver.parse(i.version) >= pyver.parse("1.6.0") and i.status == "online" - ] - for agent in agents: - # change agent update pending status to completed if agent has just updated - if ( - pyver.parse(agent.version) == pyver.parse(settings.LATEST_AGENT_VER) - and agent.pendingactions.filter( - action_type="agentupdate", status="pending" - ).exists() - ): - agent.pendingactions.filter( - action_type="agentupdate", status="pending" - ).update(status="completed") - - # sync scheduled tasks - if agent.autotasks.exclude(sync_status="synced").exists(): # type: ignore - tasks = agent.autotasks.exclude(sync_status="synced") # type: ignore - - for task in tasks: - if task.sync_status == "pendingdeletion": - task.delete_task_on_agent() - elif task.sync_status == "initial": - task.modify_task_on_agent() - elif task.sync_status == "notsynced": - task.create_task_on_agent() - - # handles any alerting actions - if Alert.objects.filter(agent=agent, resolved=False).exists(): - try: - Alert.handle_alert_resolve(agent) - except: - continue diff --git a/api/tacticalrmm/agents/tests.py b/api/tacticalrmm/agents/tests.py index 52d3f9743c..0df5249a24 100644 --- a/api/tacticalrmm/agents/tests.py +++ b/api/tacticalrmm/agents/tests.py @@ -306,8 +306,8 @@ def test_get_processes(self, mock_ret): r = self.client.get(url) self.assertEqual(r.status_code, 200) - assert any(i["name"] == "Registry" for i in mock_ret.return_value) - assert any(i["membytes"] == 434655234324 for i in mock_ret.return_value) + assert any(i["name"] == "spoolsv.exe" for i in mock_ret.return_value) + assert any(i["membytes"] == 17305600 for i in mock_ret.return_value) mock_ret.return_value = "timeout" r = self.client.get(url) diff --git a/api/tacticalrmm/agents/views.py b/api/tacticalrmm/agents/views.py index 0a1dccc2ec..298e4cfd59 100644 --- a/api/tacticalrmm/agents/views.py +++ b/api/tacticalrmm/agents/views.py @@ -167,6 +167,11 @@ class AgentProcesses(APIView): # list agent processes def get(self, request, agent_id): + if getattr(settings, "DEMO", False): + from tacticalrmm.demo_views import demo_get_procs + + return demo_get_procs() + agent = get_object_or_404(Agent, agent_id=agent_id) r = asyncio.run(agent.nats_cmd(data={"func": "procs"}, timeout=5)) if r == "timeout" or r == "natsdown": @@ -293,6 +298,11 @@ def ping(request, agent_id): @api_view(["GET"]) @permission_classes([IsAuthenticated, EvtLogPerms]) def get_event_log(request, agent_id, logtype, days): + if getattr(settings, "DEMO", False): + from tacticalrmm.demo_views import demo_get_eventlog + + return demo_get_eventlog() + agent = get_object_or_404(Agent, agent_id=agent_id) timeout = 180 if logtype == "Security" else 30 diff --git a/api/tacticalrmm/alerts/serializers.py b/api/tacticalrmm/alerts/serializers.py index b7b79add36..295b3d3a47 100644 --- a/api/tacticalrmm/alerts/serializers.py +++ b/api/tacticalrmm/alerts/serializers.py @@ -10,12 +10,29 @@ class AlertSerializer(ModelSerializer): - hostname = SerializerMethodField(read_only=True) - client = SerializerMethodField(read_only=True) - site = SerializerMethodField(read_only=True) - alert_time = SerializerMethodField(read_only=True) - resolve_on = SerializerMethodField(read_only=True) - snoozed_until = SerializerMethodField(read_only=True) + hostname = SerializerMethodField() + agent_id = SerializerMethodField() + client = SerializerMethodField() + site = SerializerMethodField() + alert_time = SerializerMethodField() + resolve_on = SerializerMethodField() + snoozed_until = SerializerMethodField() + + def get_agent_id(self, instance): + if instance.alert_type == "availability": + return instance.agent.agent_id if instance.agent else "" + elif instance.alert_type == "check": + return ( + instance.assigned_check.agent.agent_id + if instance.assigned_check + else "" + ) + elif instance.alert_type == "task": + return ( + instance.assigned_task.agent.agent_id if instance.assigned_task else "" + ) + else: + return "" def get_hostname(self, instance): if instance.alert_type == "availability": diff --git a/api/tacticalrmm/alerts/tests.py b/api/tacticalrmm/alerts/tests.py index d7791f515b..c3dc574e73 100644 --- a/api/tacticalrmm/alerts/tests.py +++ b/api/tacticalrmm/alerts/tests.py @@ -9,7 +9,7 @@ from tacticalrmm.test import TacticalTestCase from alerts.tasks import cache_agents_alert_template -from agents.tasks import handle_agents_task +from core.tasks import cache_db_fields_task from .models import Alert, AlertTemplate from .serializers import ( @@ -684,7 +684,7 @@ def test_handle_agent_alerts( agent_template_email.last_seen = djangotime.now() agent_template_email.save() - handle_agents_task() + cache_db_fields_task() recovery_sms.assert_called_with( pk=Alert.objects.get(agent=agent_template_text).pk @@ -1355,7 +1355,7 @@ def test_alert_actions( agent.last_seen = djangotime.now() agent.save() - handle_agents_task() + cache_db_fields_task() # this is what data should be data = { diff --git a/api/tacticalrmm/autotasks/migrations/0024_auto_20211214_0040.py b/api/tacticalrmm/autotasks/migrations/0024_auto_20211214_0040.py new file mode 100644 index 0000000000..8085ba7408 --- /dev/null +++ b/api/tacticalrmm/autotasks/migrations/0024_auto_20211214_0040.py @@ -0,0 +1,87 @@ +# Generated by Django 3.2.9 on 2021-12-14 00:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('autotasks', '0023_auto_20210917_1954'), + ] + + operations = [ + migrations.RemoveField( + model_name='automatedtask', + name='run_time_days', + ), + migrations.AddField( + model_name='automatedtask', + name='actions', + field=models.JSONField(default=dict), + ), + migrations.AddField( + model_name='automatedtask', + name='daily_interval', + field=models.PositiveSmallIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='automatedtask', + name='expire_date', + field=models.DateTimeField(blank=True, null=True), + ), + migrations.AddField( + model_name='automatedtask', + name='monthly_days_of_month', + field=models.PositiveIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='automatedtask', + name='monthly_months_of_year', + field=models.PositiveIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='automatedtask', + name='monthly_weeks_of_month', + field=models.PositiveSmallIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='automatedtask', + name='random_task_delay', + field=models.CharField(blank=True, max_length=10, null=True), + ), + migrations.AddField( + model_name='automatedtask', + name='stop_task_at_duration_end', + field=models.BooleanField(blank=True, default=False), + ), + migrations.AddField( + model_name='automatedtask', + name='task_instance_policy', + field=models.PositiveSmallIntegerField(blank=True, default=1), + ), + migrations.AddField( + model_name='automatedtask', + name='task_repetition_duration', + field=models.CharField(blank=True, max_length=10, null=True), + ), + migrations.AddField( + model_name='automatedtask', + name='task_repetition_interval', + field=models.CharField(blank=True, max_length=10, null=True), + ), + migrations.AddField( + model_name='automatedtask', + name='weekly_interval', + field=models.PositiveSmallIntegerField(blank=True, null=True), + ), + migrations.AlterField( + model_name='automatedtask', + name='task_type', + field=models.CharField(choices=[('daily', 'Daily'), ('weekly', 'Weekly'), ('monthly', 'Monthly'), ('monthlydow', 'Monthly Day of Week'), ('checkfailure', 'On Check Failure'), ('manual', 'Manual'), ('runonce', 'Run Once')], default='manual', max_length=100), + ), + migrations.AlterField( + model_name='automatedtask', + name='timeout', + field=models.PositiveIntegerField(blank=True, default=120), + ), + ] diff --git a/api/tacticalrmm/autotasks/migrations/0025_automatedtask_continue_on_error.py b/api/tacticalrmm/autotasks/migrations/0025_automatedtask_continue_on_error.py new file mode 100644 index 0000000000..b54bc50462 --- /dev/null +++ b/api/tacticalrmm/autotasks/migrations/0025_automatedtask_continue_on_error.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.10 on 2021-12-29 14:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('autotasks', '0024_auto_20211214_0040'), + ] + + operations = [ + migrations.AddField( + model_name='automatedtask', + name='continue_on_error', + field=models.BooleanField(default=True), + ), + ] diff --git a/api/tacticalrmm/autotasks/migrations/0026_alter_automatedtask_monthly_days_of_month.py b/api/tacticalrmm/autotasks/migrations/0026_alter_automatedtask_monthly_days_of_month.py new file mode 100644 index 0000000000..bceed23a8c --- /dev/null +++ b/api/tacticalrmm/autotasks/migrations/0026_alter_automatedtask_monthly_days_of_month.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.10 on 2021-12-30 14:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('autotasks', '0025_automatedtask_continue_on_error'), + ] + + operations = [ + migrations.AlterField( + model_name='automatedtask', + name='monthly_days_of_month', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + ] diff --git a/api/tacticalrmm/autotasks/migrations/0027_auto_20220107_0643.py b/api/tacticalrmm/autotasks/migrations/0027_auto_20220107_0643.py new file mode 100644 index 0000000000..a5bd91d9de --- /dev/null +++ b/api/tacticalrmm/autotasks/migrations/0027_auto_20220107_0643.py @@ -0,0 +1,24 @@ +# Generated by Django 3.2.11 on 2022-01-07 06:43 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('autotasks', '0026_alter_automatedtask_monthly_days_of_month'), + ] + + operations = [ + migrations.AlterField( + model_name='automatedtask', + name='daily_interval', + field=models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(255)]), + ), + migrations.AlterField( + model_name='automatedtask', + name='weekly_interval', + field=models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(52)]), + ), + ] diff --git a/api/tacticalrmm/autotasks/models.py b/api/tacticalrmm/autotasks/models.py index 1891134668..eb1a0646a0 100644 --- a/api/tacticalrmm/autotasks/models.py +++ b/api/tacticalrmm/autotasks/models.py @@ -3,6 +3,7 @@ import random import string from typing import List +from django.db.models.fields.json import JSONField import pytz from alerts.models import SEVERITY_CHOICES @@ -10,24 +11,24 @@ from django.db import models from django.db.models.fields import DateTimeField from django.db.utils import DatabaseError +from django.core.validators import MaxValueValidator, MinValueValidator from django.utils import timezone as djangotime from logs.models import BaseAuditModel, DebugLog from tacticalrmm.models import PermissionQuerySet from packaging import version as pyver -from tacticalrmm.utils import bitdays_to_string - -RUN_TIME_DAY_CHOICES = [ - (0, "Monday"), - (1, "Tuesday"), - (2, "Wednesday"), - (3, "Thursday"), - (4, "Friday"), - (5, "Saturday"), - (6, "Sunday"), -] +from tacticalrmm.utils import ( + bitdays_to_string, + bitmonthdays_to_string, + bitmonths_to_string, + bitweeks_to_string, + convert_to_iso_duration, +) TASK_TYPE_CHOICES = [ - ("scheduled", "Scheduled"), + ("daily", "Daily"), + ("weekly", "Weekly"), + ("monthly", "Monthly"), + ("monthlydow", "Monthly Day of Week"), ("checkfailure", "On Check Failure"), ("manual", "Manual"), ("runonce", "Run Once"), @@ -71,6 +72,8 @@ class AutomatedTask(BaseAuditModel): blank=True, on_delete=models.SET_NULL, ) + + # deprecated script = models.ForeignKey( "scripts.Script", null=True, @@ -78,12 +81,18 @@ class AutomatedTask(BaseAuditModel): related_name="autoscript", on_delete=models.SET_NULL, ) + # deprecated script_args = ArrayField( models.CharField(max_length=255, null=True, blank=True), null=True, blank=True, default=list, ) + # deprecated + timeout = models.PositiveIntegerField(blank=True, default=120) + + # format -> {"actions": [{"type": "script", "pk": 1, "shell": "powershell", "timeout": 90, "script_args": []}, {"type": "cmd", "command": "whoami"}]} + actions = JSONField(default=dict) assigned_check = models.ForeignKey( "checks.Check", null=True, @@ -92,26 +101,9 @@ class AutomatedTask(BaseAuditModel): on_delete=models.SET_NULL, ) name = models.CharField(max_length=255) - run_time_bit_weekdays = models.IntegerField(null=True, blank=True) - # run_time_days is deprecated, use bit weekdays - run_time_days = ArrayField( - models.IntegerField(choices=RUN_TIME_DAY_CHOICES, null=True, blank=True), - null=True, - blank=True, - default=list, - ) - run_time_minute = models.CharField(max_length=5, null=True, blank=True) - task_type = models.CharField( - max_length=100, choices=TASK_TYPE_CHOICES, default="manual" - ) collector_all_output = models.BooleanField(default=False) - run_time_date = DateTimeField(null=True, blank=True) - remove_if_not_scheduled = models.BooleanField(default=False) - run_asap_after_missed = models.BooleanField(default=False) # added in agent v1.4.7 managed_by_policy = models.BooleanField(default=False) parent_task = models.PositiveIntegerField(null=True, blank=True) - win_task_name = models.CharField(max_length=255, null=True, blank=True) - timeout = models.PositiveIntegerField(default=120) retvalue = models.TextField(null=True, blank=True) retcode = models.IntegerField(null=True, blank=True) stdout = models.TextField(null=True, blank=True) @@ -119,6 +111,7 @@ class AutomatedTask(BaseAuditModel): execution_time = models.CharField(max_length=100, default="0.0000") last_run = models.DateTimeField(null=True, blank=True) enabled = models.BooleanField(default=True) + continue_on_error = models.BooleanField(default=True) status = models.CharField( max_length=30, choices=TASK_STATUS_CHOICES, default="pending" ) @@ -132,33 +125,79 @@ class AutomatedTask(BaseAuditModel): text_alert = models.BooleanField(default=False) dashboard_alert = models.BooleanField(default=False) + # options sent to agent for task creation + # general task settings + task_type = models.CharField( + max_length=100, choices=TASK_TYPE_CHOICES, default="manual" + ) + win_task_name = models.CharField(max_length=255, null=True, blank=True) + run_time_date = DateTimeField(null=True, blank=True) + expire_date = DateTimeField(null=True, blank=True) + + # daily + daily_interval = models.PositiveSmallIntegerField( + blank=True, null=True, validators=[MinValueValidator(1), MaxValueValidator(255)] + ) + + # weekly + run_time_bit_weekdays = models.IntegerField(null=True, blank=True) + weekly_interval = models.PositiveSmallIntegerField( + blank=True, null=True, validators=[MinValueValidator(1), MaxValueValidator(52)] + ) + run_time_minute = models.CharField( + max_length=5, null=True, blank=True + ) # deprecated + + # monthly + monthly_days_of_month = models.PositiveBigIntegerField(blank=True, null=True) + monthly_months_of_year = models.PositiveIntegerField(blank=True, null=True) + + # monthly days of week + monthly_weeks_of_month = models.PositiveSmallIntegerField(blank=True, null=True) + + # additional task settings + task_repetition_duration = models.CharField(max_length=10, null=True, blank=True) + task_repetition_interval = models.CharField(max_length=10, null=True, blank=True) + stop_task_at_duration_end = models.BooleanField(blank=True, default=False) + random_task_delay = models.CharField(max_length=10, null=True, blank=True) + remove_if_not_scheduled = models.BooleanField(default=False) + run_asap_after_missed = models.BooleanField(default=False) # added in agent v1.4.7 + task_instance_policy = models.PositiveSmallIntegerField(blank=True, default=1) + def __str__(self): return self.name def save(self, *args, **kwargs): - from autotasks.tasks import enable_or_disable_win_task + from autotasks.tasks import modify_win_task from automation.tasks import update_policy_autotasks_fields_task # get old agent if exists old_task = AutomatedTask.objects.get(pk=self.pk) if self.pk else None super(AutomatedTask, self).save(old_model=old_task, *args, **kwargs) + # check if fields were updated that require a sync to the agent + update_agent = False + if old_task: + for field in self.fields_that_trigger_task_update_on_agent: + if getattr(self, field) != getattr(old_task, field): + update_agent = True + break + # check if automated task was enabled/disabled and send celery task - if old_task and old_task.enabled != self.enabled: - if self.agent: - enable_or_disable_win_task.delay(pk=self.pk) + if old_task and old_task.agent and update_agent: + modify_win_task.delay(pk=self.pk) - # check if automated task was enabled/disabled and send celery task - elif old_task.policy: - update_policy_autotasks_fields_task.delay( - task=self.pk, update_agent=True - ) # check if policy task was edited and then check if it was a field worth copying to rest of agent tasks elif old_task and old_task.policy: - for field in self.policy_fields_to_copy: - if getattr(self, field) != getattr(old_task, field): - update_policy_autotasks_fields_task.delay(task=self.pk) - break + if update_agent: + update_policy_autotasks_fields_task.delay( + task=self.pk, update_agent=update_agent + ) + else: + for field in self.policy_fields_to_copy: + if getattr(self, field) != getattr(old_task, field): + update_policy_autotasks_fields_task.delay(task=self.pk) + break @property def schedule(self): @@ -168,13 +207,30 @@ def schedule(self): return "Every time check fails" elif self.task_type == "runonce": return f'Run once on {self.run_time_date.strftime("%m/%d/%Y %I:%M%p")}' - elif self.task_type == "scheduled": - run_time_nice = dt.datetime.strptime( - self.run_time_minute, "%H:%M" - ).strftime("%I:%M %p") - + elif self.task_type == "daily": + run_time_nice = self.run_time_date.strftime("%I:%M%p") + if self.daily_interval == 1: + return f"Daily at {run_time_nice}" + else: + return f"Every {self.daily_interval} days at {run_time_nice}" + elif self.task_type == "weekly": + run_time_nice = self.run_time_date.strftime("%I:%M%p") days = bitdays_to_string(self.run_time_bit_weekdays) - return f"{days} at {run_time_nice}" + if self.weekly_interval != 1: + return f"{days} at {run_time_nice}" + else: + return f"{days} at {run_time_nice} every {self.weekly_interval} weeks" + elif self.task_type == "monthly": + run_time_nice = self.run_time_date.strftime("%I:%M%p") + months = bitmonths_to_string(self.monthly_months_of_year) + days = bitmonthdays_to_string(self.monthly_days_of_month) + return f"Runs on {months} on days {days} at {run_time_nice}" + elif self.task_type == "monthlydow": + run_time_nice = self.run_time_date.strftime("%I:%M%p") + months = bitmonths_to_string(self.monthly_months_of_year) + weeks = bitweeks_to_string(self.monthly_weeks_of_month) + days = bitdays_to_string(self.run_time_bit_weekdays) + return f"Runs on {months} on {weeks} on {days} at {run_time_nice}" @property def last_run_as_timezone(self): @@ -193,22 +249,53 @@ def policy_fields_to_copy(self) -> List[str]: "email_alert", "text_alert", "dashboard_alert", - "script", - "script_args", "assigned_check", "name", - "run_time_days", - "run_time_minute", + "actions", "run_time_bit_weekdays", "run_time_date", + "expire_date", + "daily_interval", + "weekly_interval", "task_type", "win_task_name", - "timeout", "enabled", "remove_if_not_scheduled", "run_asap_after_missed", "custom_field", "collector_all_output", + "monthly_days_of_month", + "monthly_months_of_year", + "monthly_weeks_of_month", + "task_repetition_duration", + "task_repetition_interval", + "stop_task_at_duration_end", + "random_task_delay", + "run_asap_after_missed", + "task_instance_policy", + "continue_on_error", + ] + + @property + def fields_that_trigger_task_update_on_agent(self) -> List[str]: + return [ + "run_time_bit_weekdays", + "run_time_date", + "expire_date", + "daily_interval", + "weekly_interval", + "enabled", + "remove_if_not_scheduled", + "run_asap_after_missed", + "monthly_days_of_month", + "monthly_months_of_year", + "monthly_weeks_of_month", + "task_repetition_duration", + "task_repetition_interval", + "stop_task_at_duration_end", + "random_task_delay", + "run_asap_after_missed", + "task_instance_policy", ] @staticmethod @@ -261,79 +348,161 @@ def create_policy_task(self, agent=None, policy=None, assigned_check=None): if agent: task.create_task_on_agent() + # agent version >= 1.7.3 + def generate_nats_task_payload(self, editing=False): + task = { + "pk": self.pk, + "type": "rmm", + "name": self.win_task_name, + "overwrite_task": editing, + "enabled": self.enabled, + "trigger": self.task_type if self.task_type != "checkfailure" else "manual", + "multiple_instances": self.task_instance_policy + if self.task_instance_policy + else 0, + "delete_expired_task_after": self.remove_if_not_scheduled, + "start_when_available": self.run_asap_after_missed + if self.task_type != "runonce" + else True, + } + + if self.task_type in ["runonce", "daily", "weekly", "monthly", "monthlydow"]: + + task["start_year"] = int(self.run_time_date.strftime("%Y")) + task["start_month"] = int(self.run_time_date.strftime("%-m")) + task["start_day"] = int(self.run_time_date.strftime("%-d")) + task["start_hour"] = int(self.run_time_date.strftime("%-H")) + task["start_min"] = int(self.run_time_date.strftime("%-M")) + + if self.expire_date: + task["expire_year"] = int(self.expire_date.strftime("%Y")) + task["expire_month"] = int(self.expire_date.strftime("%-m")) + task["expire_day"] = int(self.expire_date.strftime("%-d")) + task["expire_hour"] = int(self.expire_date.strftime("%-H")) + task["expire_min"] = int(self.expire_date.strftime("%-M")) + + if self.random_task_delay: + task["random_delay"] = convert_to_iso_duration(self.random_task_delay) + + if self.task_repetition_interval: + task["repetition_interval"] = convert_to_iso_duration( + self.task_repetition_interval + ) + task["repetition_duration"] = convert_to_iso_duration( + self.task_repetition_duration + ) + task["stop_at_duration_end"] = self.stop_task_at_duration_end + + if self.task_type == "daily": + task["day_interval"] = self.daily_interval + + elif self.task_type == "weekly": + task["week_interval"] = self.weekly_interval + task["days_of_week"] = self.run_time_bit_weekdays + + elif self.task_type == "monthly": + + # check if "last day is configured" + if self.monthly_days_of_month > 0x80000000: + task["days_of_month"] = self.monthly_days_of_month - 0x80000000 + task["run_on_last_day_of_month"] = True + else: + task["days_of_month"] = self.monthly_days_of_month + task["run_on_last_day_of_month"] = False + + task["months_of_year"] = self.monthly_months_of_year + + elif self.task_type == "monthlydow": + task["days_of_week"] = self.run_time_bit_weekdays + task["months_of_year"] = self.monthly_months_of_year + task["weeks_of_month"] = self.monthly_weeks_of_month + + return task + def create_task_on_agent(self): from agents.models import Agent agent = ( Agent.objects.filter(pk=self.agent.pk) .only("pk", "version", "hostname", "agent_id") - .first() + .get() ) - if self.task_type == "scheduled": - nats_data = { - "func": "schedtask", - "schedtaskpayload": { - "type": "rmm", - "trigger": "weekly", - "weekdays": self.run_time_bit_weekdays, - "pk": self.pk, - "name": self.win_task_name, - "hour": dt.datetime.strptime(self.run_time_minute, "%H:%M").hour, - "min": dt.datetime.strptime(self.run_time_minute, "%H:%M").minute, - }, - } - - elif self.task_type == "runonce": - # check if scheduled time is in the past - agent_tz = pytz.timezone(agent.timezone) # type: ignore - task_time_utc = self.run_time_date.replace(tzinfo=agent_tz).astimezone( - pytz.utc - ) - now = djangotime.now() - if task_time_utc < now: - self.run_time_date = now.astimezone(agent_tz).replace( - tzinfo=pytz.utc - ) + djangotime.timedelta(minutes=5) - self.save(update_fields=["run_time_date"]) - + if pyver.parse(agent.version) >= pyver.parse("1.7.3"): nats_data = { "func": "schedtask", - "schedtaskpayload": { - "type": "rmm", - "trigger": "once", - "pk": self.pk, - "name": self.win_task_name, - "year": int(dt.datetime.strftime(self.run_time_date, "%Y")), - "month": dt.datetime.strftime(self.run_time_date, "%B"), - "day": int(dt.datetime.strftime(self.run_time_date, "%d")), - "hour": int(dt.datetime.strftime(self.run_time_date, "%H")), - "min": int(dt.datetime.strftime(self.run_time_date, "%M")), - }, - } - - if self.run_asap_after_missed and pyver.parse(agent.version) >= pyver.parse( # type: ignore - "1.4.7" - ): - nats_data["schedtaskpayload"]["run_asap_after_missed"] = True - - if self.remove_if_not_scheduled: - nats_data["schedtaskpayload"]["deleteafter"] = True - - elif self.task_type == "checkfailure" or self.task_type == "manual": - nats_data = { - "func": "schedtask", - "schedtaskpayload": { - "type": "rmm", - "trigger": "manual", - "pk": self.pk, - "name": self.win_task_name, - }, + "schedtaskpayload": self.generate_nats_task_payload(), } else: - return "error" - r = asyncio.run(agent.nats_cmd(nats_data, timeout=5)) # type: ignore + if self.task_type == "scheduled": + nats_data = { + "func": "schedtask", + "schedtaskpayload": { + "type": "rmm", + "trigger": "weekly", + "weekdays": self.run_time_bit_weekdays, + "pk": self.pk, + "name": self.win_task_name, + "hour": dt.datetime.strptime( + self.run_time_minute, "%H:%M" + ).hour, + "min": dt.datetime.strptime( + self.run_time_minute, "%H:%M" + ).minute, + }, + } + + elif self.task_type == "runonce": + # check if scheduled time is in the past + agent_tz = pytz.timezone(agent.timezone) + task_time_utc = self.run_time_date.replace(tzinfo=agent_tz).astimezone( + pytz.utc + ) + now = djangotime.now() + if task_time_utc < now: + self.run_time_date = now.astimezone(agent_tz).replace( + tzinfo=pytz.utc + ) + djangotime.timedelta(minutes=5) + self.save(update_fields=["run_time_date"]) + + nats_data = { + "func": "schedtask", + "schedtaskpayload": { + "type": "rmm", + "trigger": "once", + "pk": self.pk, + "name": self.win_task_name, + "year": int(dt.datetime.strftime(self.run_time_date, "%Y")), + "month": dt.datetime.strftime(self.run_time_date, "%B"), + "day": int(dt.datetime.strftime(self.run_time_date, "%d")), + "hour": int(dt.datetime.strftime(self.run_time_date, "%H")), + "min": int(dt.datetime.strftime(self.run_time_date, "%M")), + }, + } + + if self.run_asap_after_missed and pyver.parse( + agent.version + ) >= pyver.parse("1.4.7"): + nats_data["schedtaskpayload"]["run_asap_after_missed"] = True + + if self.remove_if_not_scheduled: + nats_data["schedtaskpayload"]["deleteafter"] = True + + elif self.task_type == "checkfailure" or self.task_type == "manual": + nats_data = { + "func": "schedtask", + "schedtaskpayload": { + "type": "rmm", + "trigger": "manual", + "pk": self.pk, + "name": self.win_task_name, + }, + } + else: + return "error" + + r = asyncio.run(agent.nats_cmd(nats_data, timeout=5)) if r != "ok": self.sync_status = "initial" @@ -341,7 +510,7 @@ def create_task_on_agent(self): DebugLog.warning( agent=agent, log_type="agent_issues", - message=f"Unable to create scheduled task {self.name} on {agent.hostname}. It will be created when the agent checks in.", # type: ignore + message=f"Unable to create scheduled task {self.name} on {agent.hostname}. It will be created when the agent checks in.", ) return "timeout" else: @@ -350,7 +519,7 @@ def create_task_on_agent(self): DebugLog.info( agent=agent, log_type="agent_issues", - message=f"{agent.hostname} task {self.name} was successfully created", # type: ignore + message=f"{agent.hostname} task {self.name} was successfully created", ) return "ok" @@ -361,17 +530,23 @@ def modify_task_on_agent(self): agent = ( Agent.objects.filter(pk=self.agent.pk) .only("pk", "version", "hostname", "agent_id") - .first() + .get() ) - nats_data = { - "func": "enableschedtask", - "schedtaskpayload": { - "name": self.win_task_name, - "enabled": self.enabled, - }, - } - r = asyncio.run(agent.nats_cmd(nats_data, timeout=5)) # type: ignore + if pyver.parse(agent.version) >= pyver.parse("1.7.3"): + nats_data = { + "func": "schedtask", + "schedtaskpayload": self.generate_nats_task_payload(editing=True), + } + else: + nats_data = { + "func": "enableschedtask", + "schedtaskpayload": { + "name": self.win_task_name, + "enabled": self.enabled, + }, + } + r = asyncio.run(agent.nats_cmd(nats_data, timeout=5)) if r != "ok": self.sync_status = "notsynced" @@ -379,7 +554,7 @@ def modify_task_on_agent(self): DebugLog.warning( agent=agent, log_type="agent_issues", - message=f"Unable to modify scheduled task {self.name} on {agent.hostname}({agent.pk}). It will try again on next agent checkin", # type: ignore + message=f"Unable to modify scheduled task {self.name} on {agent.hostname}({agent.pk}). It will try again on next agent checkin", ) return "timeout" else: @@ -388,7 +563,7 @@ def modify_task_on_agent(self): DebugLog.info( agent=agent, log_type="agent_issues", - message=f"{agent.hostname} task {self.name} was successfully modified", # type: ignore + message=f"{agent.hostname} task {self.name} was successfully modified", ) return "ok" @@ -399,14 +574,14 @@ def delete_task_on_agent(self): agent = ( Agent.objects.filter(pk=self.agent.pk) .only("pk", "version", "hostname", "agent_id") - .first() + .get() ) nats_data = { "func": "delschedtask", "schedtaskpayload": {"name": self.win_task_name}, } - r = asyncio.run(agent.nats_cmd(nats_data, timeout=10)) # type: ignore + r = asyncio.run(agent.nats_cmd(nats_data, timeout=10)) if r != "ok" and "The system cannot find the file specified" not in r: self.sync_status = "pendingdeletion" @@ -419,7 +594,7 @@ def delete_task_on_agent(self): DebugLog.warning( agent=agent, log_type="agent_issues", - message=f"{agent.hostname} task {self.name} will be deleted on next checkin", # type: ignore + message=f"{agent.hostname} task {self.name} will be deleted on next checkin", ) return "timeout" else: @@ -427,7 +602,7 @@ def delete_task_on_agent(self): DebugLog.info( agent=agent, log_type="agent_issues", - message=f"{agent.hostname}({agent.pk}) task {self.name} was deleted", # type: ignore + message=f"{agent.hostname}({agent.pk}) task {self.name} was deleted", ) return "ok" @@ -438,10 +613,10 @@ def run_win_task(self): agent = ( Agent.objects.filter(pk=self.agent.pk) .only("pk", "version", "hostname", "agent_id") - .first() + .get() ) - asyncio.run(agent.nats_cmd({"func": "runtask", "taskpk": self.pk}, wait=False)) # type: ignore + asyncio.run(agent.nats_cmd({"func": "runtask", "taskpk": self.pk}, wait=False)) return "ok" def save_collector_results(self): diff --git a/api/tacticalrmm/autotasks/serializers.py b/api/tacticalrmm/autotasks/serializers.py index be4ed83a61..b7de224242 100644 --- a/api/tacticalrmm/autotasks/serializers.py +++ b/api/tacticalrmm/autotasks/serializers.py @@ -1,9 +1,6 @@ from rest_framework import serializers -from agents.models import Agent -from checks.serializers import CheckSerializer from scripts.models import Script -from scripts.serializers import ScriptCheckSerializer from .models import AutomatedTask @@ -14,6 +11,79 @@ class TaskSerializer(serializers.ModelSerializer): schedule = serializers.ReadOnlyField() last_run = serializers.ReadOnlyField(source="last_run_as_timezone") alert_template = serializers.SerializerMethodField() + run_time_date = serializers.DateTimeField(format="iso-8601") + expire_date = serializers.DateTimeField(format="iso-8601", allow_null=True) + + def validate(self, data): + + if "task_type" not in data: + return data + + # run_time_date required + if ( + data["task_type"] in ["runonce", "daily", "weekly", "monthly", "monthlydow"] + and not data["run_time_date"] + ): + raise serializers.ValidationError( + f"run_time_date is required for task_type '{data['task_type']}'" + ) + + # daily task type validation + if data["task_type"] == "daily": + if not data["daily_interval"]: + raise serializers.ValidationError( + f"daily_interval is required for task_type '{data['task_type']}'" + ) + + # weekly task type validation + if data["task_type"] == "weekly": + if not data["weekly_interval"]: + raise serializers.ValidationError( + f"weekly_interval is required for task_type '{data['task_type']}'" + ) + + if not data["run_time_bit_weekdays"]: + raise serializers.ValidationError( + f"run_time_bit_weekdays is required for task_type '{data['task_type']}'" + ) + + # monthly task type validation + if data["task_type"] == "monthly": + if not data["monthly_months_of_year"]: + raise serializers.ValidationError( + f"monthly_months_of_year is required for task_type '{data['task_type']}'" + ) + + if not data["monthly_days_of_month"]: + raise serializers.ValidationError( + f"monthly_days_of_month is required for task_type '{data['task_type']}'" + ) + + # monthly day of week task type validation + if data["task_type"] == "monthlydow": + if not data["monthly_months_of_year"]: + raise serializers.ValidationError( + f"monthly_months_of_year is required for task_type '{data['task_type']}'" + ) + + if not data["monthly_weeks_of_month"]: + raise serializers.ValidationError( + f"monthly_weeks_of_month is required for task_type '{data['task_type']}'" + ) + + if not data["run_time_bit_weekdays"]: + raise serializers.ValidationError( + f"run_time_bit_weekdays is required for task_type '{data['task_type']}'" + ) + + # check failure task type validation + if data["task_type"] == "checkfailure": + if not data["assigned_check"]: + raise serializers.ValidationError( + f"assigned_check is required for task_type '{data['task_type']}'" + ) + + return data def get_alert_template(self, obj): @@ -37,34 +107,46 @@ class Meta: fields = "__all__" -# below is for the windows agent -class TaskRunnerScriptField(serializers.ModelSerializer): - class Meta: - model = Script - fields = ["id", "filepath", "filename", "shell", "script_type"] - - -class TaskRunnerGetSerializer(serializers.ModelSerializer): - - script = TaskRunnerScriptField(read_only=True) - - class Meta: - model = AutomatedTask - fields = ["id", "script", "timeout", "enabled", "script_args"] - - class TaskGOGetSerializer(serializers.ModelSerializer): - script = ScriptCheckSerializer(read_only=True) - script_args = serializers.SerializerMethodField() - - def get_script_args(self, obj): - return Script.parse_script_args( - agent=obj.agent, shell=obj.script.shell, args=obj.script_args - ) + task_actions = serializers.SerializerMethodField() + + def get_task_actions(self, obj): + tmp = [] + for action in obj.actions: + if action["type"] == "cmd": + tmp.append( + { + "type": "cmd", + "command": Script.parse_script_args( + agent=obj.agent, + shell=action["shell"], + args=[action["command"]], + )[0], + "shell": action["shell"], + "timeout": action["timeout"], + } + ) + elif action["type"] == "script": + script = Script.objects.get(pk=action["script"]) + tmp.append( + { + "type": "script", + "script_name": script.name, + "code": script.code, + "script_args": Script.parse_script_args( + agent=obj.agent, + shell=script.shell, + args=action["script_args"], + ), + "shell": script.shell, + "timeout": action["timeout"], + } + ) + return tmp class Meta: model = AutomatedTask - fields = ["id", "script", "timeout", "enabled", "script_args"] + fields = ["id", "continue_on_error", "enabled", "task_actions"] class TaskRunnerPatchSerializer(serializers.ModelSerializer): diff --git a/api/tacticalrmm/autotasks/tasks.py b/api/tacticalrmm/autotasks/tasks.py index 6c6efd6c5b..8d2f7b2556 100644 --- a/api/tacticalrmm/autotasks/tasks.py +++ b/api/tacticalrmm/autotasks/tasks.py @@ -22,7 +22,7 @@ def create_win_task_schedule(pk): @app.task -def enable_or_disable_win_task(pk): +def modify_win_task(pk): task = AutomatedTask.objects.get(pk=pk) task.modify_task_on_agent() diff --git a/api/tacticalrmm/autotasks/views.py b/api/tacticalrmm/autotasks/views.py index 1ddb1676be..45a978612f 100644 --- a/api/tacticalrmm/autotasks/views.py +++ b/api/tacticalrmm/autotasks/views.py @@ -6,7 +6,6 @@ from agents.models import Agent from automation.models import Policy -from tacticalrmm.utils import get_bit_days from tacticalrmm.permissions import _has_perm_on_agent from .models import AutomatedTask @@ -44,17 +43,10 @@ def post(self, request): data["agent"] = agent.pk - bit_weekdays = None - if "run_time_days" in data.keys(): - if data["run_time_days"]: - bit_weekdays = get_bit_days(data["run_time_days"]) - data.pop("run_time_days") - serializer = TaskSerializer(data=data) serializer.is_valid(raise_exception=True) task = serializer.save( win_task_name=AutomatedTask.generate_task_name(), - run_time_bit_weekdays=bit_weekdays, ) if task.agent: diff --git a/api/tacticalrmm/checks/models.py b/api/tacticalrmm/checks/models.py index 3c14bc5138..c18f3ccaf0 100644 --- a/api/tacticalrmm/checks/models.py +++ b/api/tacticalrmm/checks/models.py @@ -1,13 +1,9 @@ -import json -import os -import string from statistics import mean from typing import Any import pytz from alerts.models import SEVERITY_CHOICES from core.models import CoreSettings -from django.conf import settings from django.contrib.postgres.fields import ArrayField from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models diff --git a/api/tacticalrmm/checks/tests.py b/api/tacticalrmm/checks/tests.py index c015c8509b..851a5340c0 100644 --- a/api/tacticalrmm/checks/tests.py +++ b/api/tacticalrmm/checks/tests.py @@ -219,14 +219,14 @@ def test_run_checks(self, nats_cmd): agent_b4_141 = baker.make_recipe("agents.agent", version="1.4.0") url = f"{base_url}/{agent_b4_141.agent_id}/run/" - r = self.client.get(url) + r = self.client.post(url) self.assertEqual(r.status_code, 200) nats_cmd.assert_called_with({"func": "runchecks"}, wait=False) nats_cmd.reset_mock() nats_cmd.return_value = "busy" url = f"{base_url}/{agent.agent_id}/run/" - r = self.client.get(url) + r = self.client.post(url) self.assertEqual(r.status_code, 400) nats_cmd.assert_called_with({"func": "runchecks"}, timeout=15) self.assertEqual(r.json(), f"Checks are already running on {agent.hostname}") @@ -234,7 +234,7 @@ def test_run_checks(self, nats_cmd): nats_cmd.reset_mock() nats_cmd.return_value = "ok" url = f"{base_url}/{agent.agent_id}/run/" - r = self.client.get(url) + r = self.client.post(url) self.assertEqual(r.status_code, 200) nats_cmd.assert_called_with({"func": "runchecks"}, timeout=15) self.assertEqual(r.json(), f"Checks will now be re-run on {agent.hostname}") @@ -242,12 +242,12 @@ def test_run_checks(self, nats_cmd): nats_cmd.reset_mock() nats_cmd.return_value = "timeout" url = f"{base_url}/{agent.agent_id}/run/" - r = self.client.get(url) + r = self.client.post(url) self.assertEqual(r.status_code, 400) nats_cmd.assert_called_with({"func": "runchecks"}, timeout=15) self.assertEqual(r.json(), "Unable to contact the agent") - self.check_not_authenticated("get", url) + self.check_not_authenticated("post", url) def test_get_check_history(self): # setup data @@ -1017,7 +1017,8 @@ def test_check_get_edit_delete_permissions(self, delete_check): self.check_not_authorized(method, unauthorized_url) self.check_authorized(method, policy_url) - def test_check_action_permissions(self): + @patch("agents.models.Agent.nats_cmd") + def test_check_action_permissions(self, nats_cmd): agent = baker.make_recipe("agents.agent") unauthorized_agent = baker.make_recipe("agents.agent") diff --git a/api/tacticalrmm/checks/views.py b/api/tacticalrmm/checks/views.py index 7248b5e61e..233dbc3649 100644 --- a/api/tacticalrmm/checks/views.py +++ b/api/tacticalrmm/checks/views.py @@ -195,7 +195,7 @@ def patch(self, request, pk): ) -@api_view() +@api_view(["POST"]) @permission_classes([IsAuthenticated, RunChecksPerms]) def run_checks(request, agent_id): agent = get_object_or_404(Agent, agent_id=agent_id) diff --git a/api/tacticalrmm/clients/migrations/0020_auto_20211226_0547.py b/api/tacticalrmm/clients/migrations/0020_auto_20211226_0547.py new file mode 100644 index 0000000000..c157c9631f --- /dev/null +++ b/api/tacticalrmm/clients/migrations/0020_auto_20211226_0547.py @@ -0,0 +1,34 @@ +# Generated by Django 3.2.10 on 2021-12-26 05:47 + +import clients.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('clients', '0019_remove_deployment_client'), + ] + + operations = [ + migrations.AddField( + model_name='client', + name='agent_count', + field=models.PositiveIntegerField(default=0), + ), + migrations.AddField( + model_name='client', + name='failing_checks', + field=models.JSONField(default=clients.models._default_failing_checks_data), + ), + migrations.AddField( + model_name='site', + name='agent_count', + field=models.PositiveIntegerField(default=0), + ), + migrations.AddField( + model_name='site', + name='failing_checks', + field=models.JSONField(default=clients.models._default_failing_checks_data), + ), + ] diff --git a/api/tacticalrmm/clients/models.py b/api/tacticalrmm/clients/models.py index 17c0b7b707..3f8ed6a526 100644 --- a/api/tacticalrmm/clients/models.py +++ b/api/tacticalrmm/clients/models.py @@ -9,11 +9,17 @@ from tacticalrmm.utils import AGENT_DEFER +def _default_failing_checks_data(): + return {"error": False, "warning": False} + + class Client(BaseAuditModel): objects = PermissionQuerySet.as_manager() name = models.CharField(max_length=255, unique=True) block_policy_inheritance = models.BooleanField(default=False) + failing_checks = models.JSONField(default=_default_failing_checks_data) + agent_count = models.PositiveIntegerField(default=0) workstation_policy = models.ForeignKey( "automation.Policy", related_name="workstation_clients", @@ -72,10 +78,6 @@ class Meta: def __str__(self): return self.name - @property - def agent_count(self) -> int: - return Agent.objects.defer(*AGENT_DEFER).filter(site__client=self).count() - @property def has_maintenanace_mode_agents(self): return ( @@ -86,35 +88,8 @@ def has_maintenanace_mode_agents(self): ) @property - def has_failing_checks(self): - agents = Agent.objects.defer(*AGENT_DEFER).filter(site__client=self) - data = {"error": False, "warning": False} - - for agent in agents: - if agent.maintenance_mode: - break - - if agent.overdue_email_alert or agent.overdue_text_alert: - if agent.status == "overdue": - data["error"] = True - break - - if agent.checks["has_failing_checks"]: - - if agent.checks["warning"]: - data["warning"] = True - - if agent.checks["failing"]: - data["error"] = True - break - - if agent.autotasks.exists(): # type: ignore - for i in agent.autotasks.all(): # type: ignore - if i.status == "failing" and i.alert_severity == "error": - data["error"] = True - break - - return data + def live_agent_count(self) -> int: + return Agent.objects.defer(*AGENT_DEFER).filter(site__client=self).count() @staticmethod def serialize(client): @@ -130,6 +105,8 @@ class Site(BaseAuditModel): client = models.ForeignKey(Client, related_name="sites", on_delete=models.CASCADE) name = models.CharField(max_length=255) block_policy_inheritance = models.BooleanField(default=False) + failing_checks = models.JSONField(default=_default_failing_checks_data) + agent_count = models.PositiveIntegerField(default=0) workstation_policy = models.ForeignKey( "automation.Policy", related_name="workstation_sites", @@ -184,53 +161,13 @@ class Meta: def __str__(self): return self.name - @property - def agent_count(self) -> int: - return Agent.objects.defer(*AGENT_DEFER).filter(site=self).count() - @property def has_maintenanace_mode_agents(self): - return ( - Agent.objects.defer(*AGENT_DEFER) - .filter(site=self, maintenance_mode=True) - .count() - > 0 - ) + return self.agents.defer(*AGENT_DEFER).filter(maintenance_mode=True).count() > 0 # type: ignore @property - def has_failing_checks(self): - agents = ( - Agent.objects.defer(*AGENT_DEFER) - .filter(site=self) - .prefetch_related("agentchecks", "autotasks") - ) - - data = {"error": False, "warning": False} - - for agent in agents: - if agent.maintenance_mode: - break - - if agent.overdue_email_alert or agent.overdue_text_alert: - if agent.status == "overdue": - data["error"] = True - break - - if agent.checks["has_failing_checks"]: - if agent.checks["warning"]: - data["warning"] = True - - if agent.checks["failing"]: - data["error"] = True - break - - if agent.autotasks.exists(): # type: ignore - for i in agent.autotasks.all(): # type: ignore - if i.status == "failing" and i.alert_severity == "error": - data["error"] = True - break - - return data + def live_agent_count(self) -> int: + return self.agents.defer(*AGENT_DEFER).count() # type: ignore @staticmethod def serialize(site): diff --git a/api/tacticalrmm/clients/serializers.py b/api/tacticalrmm/clients/serializers.py index 8336157785..33fb0c3a1e 100644 --- a/api/tacticalrmm/clients/serializers.py +++ b/api/tacticalrmm/clients/serializers.py @@ -30,9 +30,7 @@ class Meta: class SiteSerializer(ModelSerializer): client_name = ReadOnlyField(source="client.name") custom_fields = SiteCustomFieldSerializer(many=True, read_only=True) - agent_count = ReadOnlyField() maintenance_mode = ReadOnlyField(source="has_maintenanace_mode_agents") - failing_checks = ReadOnlyField(source="has_failing_checks") class Meta: model = Site @@ -94,9 +92,7 @@ class Meta: class ClientSerializer(ModelSerializer): sites = SerializerMethodField() custom_fields = ClientCustomFieldSerializer(many=True, read_only=True) - agent_count = ReadOnlyField() maintenance_mode = ReadOnlyField(source="has_maintenanace_mode_agents") - failing_checks = ReadOnlyField(source="has_failing_checks") def get_sites(self, obj): return SiteSerializer( diff --git a/api/tacticalrmm/clients/views.py b/api/tacticalrmm/clients/views.py index 6bec2a4a09..9356e0ad5e 100644 --- a/api/tacticalrmm/clients/views.py +++ b/api/tacticalrmm/clients/views.py @@ -126,15 +126,16 @@ def delete(self, request, pk): from automation.tasks import generate_agent_checks_task client = get_object_or_404(Client, pk=pk) + agent_count = client.live_agent_count # only run tasks if it affects clients - if client.agent_count > 0 and "move_to_site" in request.query_params.keys(): + if agent_count > 0 and "move_to_site" in request.query_params.keys(): agents = Agent.objects.filter(site__client=client) site = get_object_or_404(Site, pk=request.query_params["move_to_site"]) agents.update(site=site) generate_agent_checks_task.delay(all=True, create_tasks=True) - elif client.agent_count > 0: + elif agent_count > 0: return notify_error( "Agents exist under this client. There needs to be a site specified to move existing agents to" ) @@ -230,13 +231,14 @@ def delete(self, request, pk): return notify_error("A client must have at least 1 site.") # only run tasks if it affects clients - if site.agent_count > 0 and "move_to_site" in request.query_params.keys(): + agent_count = site.live_agent_count + if agent_count > 0 and "move_to_site" in request.query_params.keys(): agents = Agent.objects.filter(site=site) new_site = get_object_or_404(Site, pk=request.query_params["move_to_site"]) agents.update(site=new_site) generate_agent_checks_task.delay(all=True, create_tasks=True) - elif site.agent_count > 0: + elif agent_count > 0: return notify_error( "There needs to be a site specified to move the agents to" ) diff --git a/api/tacticalrmm/core/management/commands/get_mesh_exe_url.py b/api/tacticalrmm/core/management/commands/get_mesh_exe_url.py index 6058863566..1b7177fb94 100644 --- a/api/tacticalrmm/core/management/commands/get_mesh_exe_url.py +++ b/api/tacticalrmm/core/management/commands/get_mesh_exe_url.py @@ -17,8 +17,7 @@ async def websocket_call(self, mesh_settings): token = get_auth_token(mesh_settings.mesh_username, mesh_settings.mesh_token) if settings.DOCKER_BUILD: - site = mesh_settings.mesh_site.replace("https", "ws") - uri = f"{site}:443/control.ashx?auth={token}" + uri = f"{settings.MESH_WS_URL}/control.ashx?auth={token}" else: site = mesh_settings.mesh_site.replace("https", "wss") uri = f"{site}/control.ashx?auth={token}" diff --git a/api/tacticalrmm/core/management/commands/initial_mesh_setup.py b/api/tacticalrmm/core/management/commands/initial_mesh_setup.py index 30f045e728..efe2d6a23a 100644 --- a/api/tacticalrmm/core/management/commands/initial_mesh_setup.py +++ b/api/tacticalrmm/core/management/commands/initial_mesh_setup.py @@ -18,8 +18,7 @@ async def websocket_call(self, mesh_settings): token = get_auth_token(mesh_settings.mesh_username, mesh_settings.mesh_token) if settings.DOCKER_BUILD: - site = mesh_settings.mesh_site.replace("https", "ws") - uri = f"{site}:443/control.ashx?auth={token}" + uri = f"{settings.MESH_WS_URL}/control.ashx?auth={token}" else: site = mesh_settings.mesh_site.replace("https", "wss") uri = f"{site}/control.ashx?auth={token}" diff --git a/api/tacticalrmm/core/management/commands/load_demo_scripts.py b/api/tacticalrmm/core/management/commands/load_demo_scripts.py new file mode 100644 index 0000000000..67d4fb936b --- /dev/null +++ b/api/tacticalrmm/core/management/commands/load_demo_scripts.py @@ -0,0 +1,18 @@ +from scripts.models import Script +from django.core.management.base import BaseCommand +from django.conf import settings + + +class Command(BaseCommand): + help = "loads scripts for demo" + + def handle(self, *args, **kwargs): + scripts_dir = settings.BASE_DIR.joinpath("tacticalrmm/test_data/demo_scripts") + scripts = Script.objects.filter(script_type="userdefined") + for script in scripts: + filepath = scripts_dir.joinpath(script.filename) + with open(filepath, "rb") as f: + script.script_body = f.read().decode("utf-8") + script.save(update_fields=["script_body"]) + + self.stdout.write(self.style.SUCCESS("Added userdefined scripts")) diff --git a/api/tacticalrmm/core/tasks.py b/api/tacticalrmm/core/tasks.py index 6d1781b088..dba7b778dd 100644 --- a/api/tacticalrmm/core/tasks.py +++ b/api/tacticalrmm/core/tasks.py @@ -1,5 +1,7 @@ import pytz from django.utils import timezone as djangotime +from django.conf import settings +from packaging import version as pyver from autotasks.models import AutomatedTask from autotasks.tasks import delete_win_task_schedule @@ -10,6 +12,9 @@ from logs.tasks import prune_debug_log, prune_audit_log from tacticalrmm.celery import app from tacticalrmm.utils import AGENT_DEFER +from agents.models import Agent +from clients.models import Client, Site +from alerts.models import Alert @app.task @@ -55,11 +60,89 @@ def core_maintenance_tasks(): clear_faults_task.delay(core.clear_faults_days) # type: ignore +def _get_failing_data(agents): + data = {"error": False, "warning": False} + for agent in agents: + if agent.maintenance_mode: + break + + if agent.overdue_email_alert or agent.overdue_text_alert: + if agent.status == "overdue": + data["error"] = True + break + + if agent.checks["has_failing_checks"]: + + if agent.checks["warning"]: + data["warning"] = True + + if agent.checks["failing"]: + data["error"] = True + break + + if agent.autotasks.exists(): # type: ignore + for i in agent.autotasks.all(): # type: ignore + if i.status == "failing" and i.alert_severity == "error": + data["error"] = True + break + + return data + + @app.task def cache_db_fields_task(): - from agents.models import Agent + # update client/site failing check fields and agent counts + for site in Site.objects.all(): + agents = site.agents.defer(*AGENT_DEFER) + site.failing_checks = _get_failing_data(agents) + site.agent_count = agents.count() + site.save(update_fields=["failing_checks", "agent_count"]) + + for client in Client.objects.all(): + agents = Agent.objects.defer(*AGENT_DEFER).filter(site__client=client) + client.failing_checks = _get_failing_data(agents) + client.agent_count = agents.count() + client.save(update_fields=["failing_checks", "agent_count"]) for agent in Agent.objects.defer(*AGENT_DEFER): + if ( + pyver.parse(agent.version) >= pyver.parse("1.6.0") + and agent.status == "online" + ): + # change agent update pending status to completed if agent has just updated + if ( + pyver.parse(agent.version) == pyver.parse(settings.LATEST_AGENT_VER) + and agent.pendingactions.filter( + action_type="agentupdate", status="pending" + ).exists() + ): + agent.pendingactions.filter( + action_type="agentupdate", status="pending" + ).update(status="completed") + + # sync scheduled tasks + if agent.autotasks.exclude(sync_status="synced").exists(): # type: ignore + tasks = agent.autotasks.exclude(sync_status="synced") # type: ignore + + for task in tasks: + try: + if task.sync_status == "pendingdeletion": + task.delete_task_on_agent() + elif task.sync_status == "initial": + task.modify_task_on_agent() + elif task.sync_status == "notsynced": + task.create_task_on_agent() + except: + continue + + # handles any alerting actions + if Alert.objects.filter(agent=agent, resolved=False).exists(): + try: + Alert.handle_alert_resolve(agent) + except: + continue + + # update pending patches and pending action counts agent.pending_actions_count = agent.pendingactions.filter( status="pending" ).count() diff --git a/api/tacticalrmm/integrations/__init__.py b/api/tacticalrmm/integrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/tacticalrmm/integrations/admin.py b/api/tacticalrmm/integrations/admin.py new file mode 100644 index 0000000000..d0e3c792d9 --- /dev/null +++ b/api/tacticalrmm/integrations/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin + +from .models import Integration + +admin.site.register(Integration) \ No newline at end of file diff --git a/api/tacticalrmm/integrations/apps.py b/api/tacticalrmm/integrations/apps.py new file mode 100644 index 0000000000..73adb7a539 --- /dev/null +++ b/api/tacticalrmm/integrations/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class IntegrationsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'integrations' diff --git a/api/tacticalrmm/integrations/bitdefender/__init__.py b/api/tacticalrmm/integrations/bitdefender/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/tacticalrmm/integrations/bitdefender/admin.py b/api/tacticalrmm/integrations/bitdefender/admin.py new file mode 100644 index 0000000000..8c38f3f3da --- /dev/null +++ b/api/tacticalrmm/integrations/bitdefender/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/api/tacticalrmm/integrations/bitdefender/apps.py b/api/tacticalrmm/integrations/bitdefender/apps.py new file mode 100644 index 0000000000..b9ef27a378 --- /dev/null +++ b/api/tacticalrmm/integrations/bitdefender/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class BitdefenderConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'bitdefender' diff --git a/api/tacticalrmm/integrations/bitdefender/migrations/__init__.py b/api/tacticalrmm/integrations/bitdefender/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/tacticalrmm/integrations/bitdefender/models.py b/api/tacticalrmm/integrations/bitdefender/models.py new file mode 100644 index 0000000000..71a8362390 --- /dev/null +++ b/api/tacticalrmm/integrations/bitdefender/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/api/tacticalrmm/integrations/bitdefender/tests.py b/api/tacticalrmm/integrations/bitdefender/tests.py new file mode 100644 index 0000000000..7ce503c2dd --- /dev/null +++ b/api/tacticalrmm/integrations/bitdefender/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/api/tacticalrmm/integrations/bitdefender/urls.py b/api/tacticalrmm/integrations/bitdefender/urls.py new file mode 100644 index 0000000000..ed6c2e3d94 --- /dev/null +++ b/api/tacticalrmm/integrations/bitdefender/urls.py @@ -0,0 +1,13 @@ +from django.urls import path, include +from . import views + + +urlpatterns = [ + path('endpoints/', views.GetEndpoints.as_view()), + path('endpoint//', views.GetEndpoint.as_view()), + path('endpoint/quickscan//', views.GetQuickScan.as_view()), + path('endpoint/fullscan//', views.GetFullScan.as_view()), + path('endpoint/quarantine//', views.GetEndpointQuarantine.as_view()), + path('quarantine/', views.GetQuarantine.as_view()), + path('tasks/', views.GetTasks.as_view()) +] \ No newline at end of file diff --git a/api/tacticalrmm/integrations/bitdefender/views.py b/api/tacticalrmm/integrations/bitdefender/views.py new file mode 100644 index 0000000000..d7f088a3d7 --- /dev/null +++ b/api/tacticalrmm/integrations/bitdefender/views.py @@ -0,0 +1,216 @@ +from rest_framework.views import APIView +from rest_framework.permissions import AllowAny, IsAuthenticated +from rest_framework.response import Response +import requests +import json +from ..models import Integration +import base64 + +class GetEndpoints(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Bitdefender GravityZone") + + json = { + "params": { + "perPage": 100, + "page": int(request.query_params['pageNumber']), + "filters": { + "type": {"computers": True, "virtualMachines": True}, + "security": {"management": {"managedWithBest": True}}, + "depth": {"allItemsRecursively": True}, + }, + }, + "jsonrpc": "2.0", + "method": "getNetworkInventoryItems", + "id": integration.company_id, + } + result = requests.post( + integration.base_url + "v1.0/jsonrpc/network", + json=json, + verify=False, + headers={ + "Content-Type": "application/json", + "Authorization": integration.auth_header, + }, + ).json() + + return Response(result) + + +class GetEndpoint(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, endpoint_id, format=None): + integration = Integration.objects.get(name="Bitdefender GravityZone") + + json = { + "params": { + "endpointId" : endpoint_id + }, + "jsonrpc": "2.0", + "method": "getManagedEndpointDetails", + "id": integration.company_id, + } + result = requests.post( + integration.base_url + "v1.0/jsonrpc/network", + json=json, + verify=False, + headers={ + "Content-Type": "application/json", + "Authorization": integration.auth_header, + }, + ).json() + + return Response(result) + + + +class GetQuickScan(APIView): + permission_classes = [IsAuthenticated] + + def post(self, request, endpoint_id, format=None): + integration = Integration.objects.get(name="Bitdefender GravityZone") + + endpoint_array = [] + endpoint_array.append(endpoint_id) + + json = { + "params": { + "targetIds": endpoint_array, + "type": 1, + "name": "Tactical RMM initiated Quick Scan", + }, + "jsonrpc": "2.0", + "method": "createScanTask", + "id": integration.company_id, + } + + result = requests.post( + integration.base_url + "v1.0/jsonrpc/network", + json=json, + verify=False, + headers={ + "Content-Type": "application/json", + "Authorization": integration.auth_header, + }, + ).json() + + return Response(result) + +class GetFullScan(APIView): + + permission_classes = [IsAuthenticated] + + def post(self, request, endpoint_id, format=None): + integration = Integration.objects.get(name="Bitdefender GravityZone") + + endpoint_array = [] + endpoint_array.append(endpoint_id) + + json = { + "params": { + "targetIds": endpoint_array, + "type": 2, + "name": "Tactical RMM initiated Full Scan", + }, + "jsonrpc": "2.0", + "method": "createScanTask", + "id": integration.company_id, + } + + result = requests.post( + integration.base_url + "v1.0/jsonrpc/network", + json=json, + verify=False, + headers={ + "Content-Type": "application/json", + "Authorization": integration.auth_header, + }, + ).json() + + return Response(result) + + +class GetQuarantine(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Bitdefender GravityZone") + json = { + "params": { + "perPage": 100, + }, + "jsonrpc": "2.0", + "method": "getQuarantineItemsList", + "id": integration.company_id + } + + result = requests.post( + integration.base_url + "v1.0/jsonrpc/quarantine/computers", + json=json, + verify=False, + headers = { + "Content-Type": "application/json", + "Authorization": integration.auth_header + }).json() + + return Response(result) + +class GetEndpointQuarantine(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, endpoint_id, format=None): + integration = Integration.objects.get(name="Bitdefender GravityZone") + + json = { + "params": { + "endpointId": endpoint_id, + "perPage": 100, + }, + "jsonrpc": "2.0", + "method": "getQuarantineItemsList", + "id": integration.company_id + } + + result = requests.post( + integration.base_url + "v1.0/jsonrpc/quarantine/computers", + json=json, + verify=False, + headers = { + "Content-Type": "application/json", + "Authorization": integration.auth_header + }).json() + + return Response(result) + +class GetTasks(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Bitdefender GravityZone") + json = { + "params": { + "perPage": 100 + }, + "jsonrpc": "2.0", + "method": "getScanTasksList", + "id": integration.company_id + } + + result = requests.post( + integration.base_url + "v1.0/jsonrpc/network", + json=json, + verify=False, + headers = { + "Content-Type": "application/json", + "Authorization": integration.auth_header + }).json() + + return Response(result) \ No newline at end of file diff --git a/api/tacticalrmm/integrations/meraki/__init__.py b/api/tacticalrmm/integrations/meraki/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/tacticalrmm/integrations/meraki/admin.py b/api/tacticalrmm/integrations/meraki/admin.py new file mode 100644 index 0000000000..8c38f3f3da --- /dev/null +++ b/api/tacticalrmm/integrations/meraki/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/api/tacticalrmm/integrations/meraki/apps.py b/api/tacticalrmm/integrations/meraki/apps.py new file mode 100644 index 0000000000..4b07ea1efa --- /dev/null +++ b/api/tacticalrmm/integrations/meraki/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MerakiConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'meraki' diff --git a/api/tacticalrmm/integrations/meraki/migrations/__init__.py b/api/tacticalrmm/integrations/meraki/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/tacticalrmm/integrations/meraki/models.py b/api/tacticalrmm/integrations/meraki/models.py new file mode 100644 index 0000000000..71a8362390 --- /dev/null +++ b/api/tacticalrmm/integrations/meraki/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/api/tacticalrmm/integrations/meraki/tests.py b/api/tacticalrmm/integrations/meraki/tests.py new file mode 100644 index 0000000000..7ce503c2dd --- /dev/null +++ b/api/tacticalrmm/integrations/meraki/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/api/tacticalrmm/integrations/meraki/urls.py b/api/tacticalrmm/integrations/meraki/urls.py new file mode 100644 index 0000000000..89fad41ad9 --- /dev/null +++ b/api/tacticalrmm/integrations/meraki/urls.py @@ -0,0 +1,15 @@ +from django.urls import path, include +from . import views + +urlpatterns = [ + path('organizations/', views.GetOrganizations.as_view()), + path('/networks/', views.GetNetworks.as_view()), + path('/devices/statuses/', views.GetDevices.as_view()), + path('/devices_summary//', views.GetDevicesSummary.as_view()), + path('/networks/uplinks/', views.GetNetworkUplinks.as_view()), + path('/top_clients//', views.GetTopClients.as_view()), + path('/applications/traffic//', views.GetNetworkApplicationTraffic.as_view()), + path('/clients/traffic//', views.GetNetworkClientTraffic.as_view()), + path('/clients//policy/', views.GetClientPolicy.as_view()), + path('/events//', views.GetNetworkEvents.as_view()) +] \ No newline at end of file diff --git a/api/tacticalrmm/integrations/meraki/views.py b/api/tacticalrmm/integrations/meraki/views.py new file mode 100644 index 0000000000..8fec04cd92 --- /dev/null +++ b/api/tacticalrmm/integrations/meraki/views.py @@ -0,0 +1,221 @@ +from rest_framework.views import APIView +from rest_framework.permissions import AllowAny, IsAuthenticated +from rest_framework.response import Response +import requests +import json +from ..models import Integration + +class GetOrganizations(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Cisco Meraki") + + result = requests.get( + integration.base_url + "organizations/", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "X-Cisco-Meraki-API-Key": integration.api_key + }, timeout=(1,30), + ).json() + + return Response(result) + + +class GetNetworks(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, pk, format=None): + integration = Integration.objects.get(name="Cisco Meraki") + + result = requests.get( + integration.base_url + "organizations/" + pk + "/networks", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "X-Cisco-Meraki-API-Key": integration.api_key + }, timeout=(1,30), + ).json() + + return Response(result) + +class GetDevices(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, pk,format=None): + integration = Integration.objects.get(name="Cisco Meraki") + + result = requests.get( + integration.base_url + "/organizations/" + pk + "/devices/statuses/", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "X-Cisco-Meraki-API-Key": integration.api_key + }, timeout=(1,30), + ).json() + + return Response(result) + +class GetDevicesSummary(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, pk, timespan, format=None): + integration = Integration.objects.get(name="Cisco Meraki") + + if "t0" in str(timespan): + url = integration.base_url + "organizations/" + pk +"/summary/top/devices/byUsage?perPage=1000&" + str(timespan) + else: + url = integration.base_url + "organizations/" + pk +"/summary/top/devices/byUsage?perPage=1000×pan=" + str(timespan) + + result = requests.get( + url, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "X-Cisco-Meraki-API-Key": integration.api_key + }, timeout=(1,30), + ).json() + + return Response(result) + +class GetNetworkUplinks(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, pk, format=None): + integration = Integration.objects.get(name="Cisco Meraki") + + result = requests.get( + integration.base_url + "organizations/" + pk + "/uplinks/statuses", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "X-Cisco-Meraki-API-Key": integration.api_key + }, timeout=(1,30), + ).json() + + return Response(result) + +class GetTopClients(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, pk, timespan, format=None): + integration = Integration.objects.get(name="Cisco Meraki") + + if "t0" in str(timespan): + url = integration.base_url + "organizations/" + pk + "/summary/top/clients/byUsage?perPage=10&" + str(timespan) + else: + url = integration.base_url + "organizations/" + pk + "/summary/top/clients/byUsage?perPage=10×pan=" + str(timespan) + + result = requests.get( + url, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "X-Cisco-Meraki-API-Key": integration.api_key + }, timeout=(1,30), + ).json() + + return Response(result) + +class GetNetworkApplicationTraffic(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, network_id, timespan, format=None): + integration = Integration.objects.get(name="Cisco Meraki") + + if "t0" in str(timespan): + url = integration.base_url + "networks/" + network_id + "/traffic?perPage=1000&" + str(timespan) + else: + url = integration.base_url + "networks/" + network_id + "/traffic?perPage=1000×pan=" + str(timespan) + + result = requests.get( + url, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "X-Cisco-Meraki-API-Key": integration.api_key + }, timeout=(1,30), + ).json() + + return Response(result) + +class GetNetworkClientTraffic(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, network_id, timespan, format=None): + integration = Integration.objects.get(name="Cisco Meraki") + + if "t0" in str(timespan): + url = integration.base_url + "networks/" + network_id + "/clients?perPage=1000&" + str(timespan) + else: + url = integration.base_url + "networks/" + network_id + "/clients?perPage=1000×pan=" + str(timespan) + + result = requests.get( + url, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "X-Cisco-Meraki-API-Key": integration.api_key + }, timeout=(1,30), + ).json() + + return Response(result) + + +class GetClientPolicy(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, network_id, client_mac, format=None): + integration = Integration.objects.get(name="Cisco Meraki") + + result = requests.get( + integration.base_url + "networks/" + network_id + "/clients/" + client_mac + "/policy", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "X-Cisco-Meraki-API-Key": integration.api_key + }, timeout=(1,30), + ).json() + + return Response(result) + + def put(self, request, network_id, client_mac, format=None): + integration = Integration.objects.get(name="Cisco Meraki") + + request_dict = {"devicePolicy": request.data['devicePolicy']} + print(request.data) + payload = json.dumps(request_dict, indent=4) + + result = requests.put( + integration.base_url + "networks/" + network_id + "/clients/" + client_mac + "/policy", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "X-Cisco-Meraki-API-Key": integration.api_key + }, data=payload, timeout=(1,30), + ).json() + + return Response(result) + +class GetNetworkEvents(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, network_id, timespan, format=None): + integration = Integration.objects.get(name="Cisco Meraki") + + if "endingBefore" in str(timespan): + url = integration.base_url + "networks/"+ network_id +"/events?perPage=1000&productType=appliance&" + str(timespan) + else: + url = integration.base_url + "networks/"+ network_id +"/events?perPage=1000&productType=appliance" + + result = requests.get( + url, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "X-Cisco-Meraki-API-Key": integration.api_key + }, timeout=(1,30), + ).json() + + return Response(result) \ No newline at end of file diff --git a/api/tacticalrmm/integrations/migrations/0001_initial.py b/api/tacticalrmm/integrations/migrations/0001_initial.py new file mode 100644 index 0000000000..87948edef3 --- /dev/null +++ b/api/tacticalrmm/integrations/migrations/0001_initial.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.9 on 2021-12-14 16:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Integration', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=64)), + ('description', models.TextField(max_length=255)), + ('enabled', models.BooleanField(default=False)), + ], + ), + ] diff --git a/api/tacticalrmm/integrations/migrations/0002_integration_auth.py b/api/tacticalrmm/integrations/migrations/0002_integration_auth.py new file mode 100644 index 0000000000..5c08c76631 --- /dev/null +++ b/api/tacticalrmm/integrations/migrations/0002_integration_auth.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.9 on 2021-12-14 16:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('integrations', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='integration', + name='auth', + field=models.JSONField(blank=True, null=True), + ), + ] diff --git a/api/tacticalrmm/integrations/migrations/0003_auto_20211214_1702.py b/api/tacticalrmm/integrations/migrations/0003_auto_20211214_1702.py new file mode 100644 index 0000000000..628107c8b6 --- /dev/null +++ b/api/tacticalrmm/integrations/migrations/0003_auto_20211214_1702.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.9 on 2021-12-14 17:02 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('integrations', '0002_integration_auth'), + ] + + operations = [ + migrations.RenameField( + model_name='integration', + old_name='auth', + new_name='configuration', + ), + migrations.AddField( + model_name='integration', + name='data', + field=models.JSONField(blank=True, null=True), + ), + ] diff --git a/api/tacticalrmm/integrations/migrations/__init__.py b/api/tacticalrmm/integrations/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/tacticalrmm/integrations/models.py b/api/tacticalrmm/integrations/models.py new file mode 100644 index 0000000000..4b63df3e47 --- /dev/null +++ b/api/tacticalrmm/integrations/models.py @@ -0,0 +1,32 @@ +from django.db import models +import base64 + +class Integration(models.Model): + name = models.CharField(max_length=64) + description = models.TextField(max_length=255) + configuration = models.JSONField(null=True, blank=True) + data = models.JSONField(null=True, blank=True) + enabled = models.BooleanField(default=False) + + def __str__(self): + return self.name + + @property + def api_key(self): + return self.configuration["api_key"] + + @property + def auth(self): + return base64.b64encode((self.api_key + ":").encode("UTF-8")).decode("UTF-8") + + @property + def base_url(self): + return self.configuration["api_url"] + + @property + def company_id(self): + return self.configuration["company_id"] + + @property + def auth_header(self): + return "Basic " + self.auth \ No newline at end of file diff --git a/api/tacticalrmm/integrations/serializers.py b/api/tacticalrmm/integrations/serializers.py new file mode 100644 index 0000000000..bd8b3b6845 --- /dev/null +++ b/api/tacticalrmm/integrations/serializers.py @@ -0,0 +1,13 @@ +from rest_framework import serializers +from .models import Integration + + +class GetIntegrationsSerializer(serializers.ModelSerializer): + class Meta: + model = Integration + fields = ('id', 'name', 'description', 'configuration', 'enabled') + +class GetIntegrationSerializer(serializers.ModelSerializer): + class Meta: + model = Integration + fields = ('id', 'name', 'description', 'configuration', 'enabled') \ No newline at end of file diff --git a/api/tacticalrmm/integrations/snipeit/__init__.py b/api/tacticalrmm/integrations/snipeit/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/tacticalrmm/integrations/snipeit/admin.py b/api/tacticalrmm/integrations/snipeit/admin.py new file mode 100644 index 0000000000..8c38f3f3da --- /dev/null +++ b/api/tacticalrmm/integrations/snipeit/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/api/tacticalrmm/integrations/snipeit/apps.py b/api/tacticalrmm/integrations/snipeit/apps.py new file mode 100644 index 0000000000..3bc017af79 --- /dev/null +++ b/api/tacticalrmm/integrations/snipeit/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class SnipeitConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'snipeit' diff --git a/api/tacticalrmm/integrations/snipeit/migrations/__init__.py b/api/tacticalrmm/integrations/snipeit/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/tacticalrmm/integrations/snipeit/models.py b/api/tacticalrmm/integrations/snipeit/models.py new file mode 100644 index 0000000000..71a8362390 --- /dev/null +++ b/api/tacticalrmm/integrations/snipeit/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/api/tacticalrmm/integrations/snipeit/tests.py b/api/tacticalrmm/integrations/snipeit/tests.py new file mode 100644 index 0000000000..7ce503c2dd --- /dev/null +++ b/api/tacticalrmm/integrations/snipeit/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/api/tacticalrmm/integrations/snipeit/urls.py b/api/tacticalrmm/integrations/snipeit/urls.py new file mode 100644 index 0000000000..baf43d6b33 --- /dev/null +++ b/api/tacticalrmm/integrations/snipeit/urls.py @@ -0,0 +1,21 @@ +from django.urls import path, include +from . import views + + +urlpatterns = [ + path('hardware/', views.GetHardware.as_view()), + path('hardware//', views.GetAsset.as_view()), + path('hardware/by_tag//', views.GetAssetByTag.as_view()), + path('hardware//checkout/', views.GetAssetCheckout.as_view()), + path('hardware//checkin/', views.GetAssetCheckin.as_view()), + path('companies/', views.GetCompanies.as_view()), + path('companies//', views.GetCompany.as_view()), + path('statuslabels/', views.GetStatusLabels.as_view()), + path('models/', views.GetModels.as_view()), + path('manufacturers/', views.GetManufacturers.as_view()), + path('categories/', views.GetCategories.as_view()), + path('locations/', views.GetLocations.as_view()), + path('locations//', views.GetLocation.as_view()), + path('users/', views.GetUsers.as_view()), + path('users//', views.GetUser.as_view()), +] \ No newline at end of file diff --git a/api/tacticalrmm/integrations/snipeit/views.py b/api/tacticalrmm/integrations/snipeit/views.py new file mode 100644 index 0000000000..a5a84def75 --- /dev/null +++ b/api/tacticalrmm/integrations/snipeit/views.py @@ -0,0 +1,482 @@ +from rest_framework.views import APIView +from rest_framework.permissions import AllowAny, IsAuthenticated +from rest_framework.response import Response +import requests +import json +from ..models import Integration + +class GetHardware(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "hardware?limit=500&offset=0&order=desc&status=" + request.query_params['status'], + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + + def post(self, request, format=None): + integration = Integration.objects.get(name="Snipe-IT") + print(request.data) + payload = { + "requestable": False, + "asset_tag": request.data['asset_tag'], + "status_id": request.data['status_id'], + "model_id": request.data['model_id'], + "name": request.data['name'], + "serial": request.data['serial'], + "location_id": request.data['location_id'], + "company_id": request.data['company_id'] + } + print(request.data) + result = requests.post( + integration.base_url + "hardware", + json=payload, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetAsset(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, asset_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "hardware/" + asset_id, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + def put(self, request, asset_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + payload = { + "name": request.data['name'], + "assetTag": request.data['assetTag'], + "serial": request.data['serial'], + "purchaseCost": request.data['purchaseCost'], + "warranty": request.data['warranty'] + } + + result = requests.put( + integration.base_url + "hardware/" + asset_id, + json=payload, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + def delete(self, request, asset_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.delete( + integration.base_url + "hardware/" + asset_id, + json=payload, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetAssetByTag(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, asset_tag, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "hardware/bytag/" + asset_tag, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetAssetCheckout(APIView): + + permission_classes = [IsAuthenticated] + + def post(self, request, asset_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + print(request.data) + payload = { + "id": asset_id, + "checkout_to_type": request.data['checkout_to_type'], + "assigned_user": 3, + "checkout_at": request.data['checkout_at'], + "expected_checkin": request.data['expected_checkin'], + "note": request.data['note'] + } + + result = requests.post( + integration.base_url + "hardware/" + asset_id + "/checkout", + json=payload, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + +class GetAssetCheckin(APIView): + + permission_classes = [IsAuthenticated] + + def post(self, request, asset_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + print(request.data) + payload = { + "id": asset_id, + "location_id": request.data['location_id'], + "note": request.data['note'] + } + + result = requests.post( + integration.base_url + "hardware/" + asset_id + "/checkin", + json=payload, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetCompanies(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "companies/", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetCompany(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, company_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "companies/" + company_id, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + def patch(self, request, company_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + payload = { + "name": request.data['name'] + } + + result = requests.patch( + integration.base_url + "companies/" + company_id, + json=payload, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + + def delete(self, request, company_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.delete( + integration.base_url + "companies/" + company_id, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetStatusLabels(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "statuslabels/", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetCategories(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "categories/", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetModels(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "models/", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + def post(self, request, format=None): + integration = Integration.objects.get(name="Snipe-IT") + print(request.data['model_name']) + payload = { + "name": request.data['model_name'], + "model_number": request.data['model_number'], + "category_id": request.data['category_id'], + "manufacturer_id": request.data['manufacturer_id'] + } + + result = requests.post( + integration.base_url + "models", + json=payload, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetManufacturers(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "manufacturers/", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + +class GetLocations(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "locations/", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetLocation(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, location_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "locations/" + location_id, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + def patch(self, request, location_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + payload = { + "name": request.data['name'] + } + + result = requests.patch( + integration.base_url + "locations/" + location_id, + json=payload, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + def delete(self, request, location_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.delete( + integration.base_url + "locations/" + location_id, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetUsers(APIView): + + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "users/", + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + +class GetUser(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, user_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.get( + integration.base_url + "users/" + user_id, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + def patch(self, request, user_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + payload = { + "first_name": request.data['first_name'], + "last_name": request.data['last_name'], + "jobtitle": request.data['jobtitle'], + "department": request.data['department'] + } + + result = requests.patch( + integration.base_url + "users/" + user_id, + json=payload, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) + + def delete(self, request, user_id, format=None): + integration = Integration.objects.get(name="Snipe-IT") + + result = requests.delete( + integration.base_url + "users/" + user_id, + headers={ + "Accept": "application/json", + "Content-Type": "application/json", + "Authorization": f"Bearer {integration.api_key.strip()}" + }, + ).json() + + return Response(result) \ No newline at end of file diff --git a/api/tacticalrmm/integrations/tests.py b/api/tacticalrmm/integrations/tests.py new file mode 100644 index 0000000000..7ce503c2dd --- /dev/null +++ b/api/tacticalrmm/integrations/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/api/tacticalrmm/integrations/urls.py b/api/tacticalrmm/integrations/urls.py new file mode 100644 index 0000000000..9704a84c43 --- /dev/null +++ b/api/tacticalrmm/integrations/urls.py @@ -0,0 +1,8 @@ +from django.urls import path + +from . import views + +urlpatterns = [ + path("", views.GetIntegrations.as_view()), + path("/", views.GetIntegration.as_view()), +] diff --git a/api/tacticalrmm/integrations/views.py b/api/tacticalrmm/integrations/views.py new file mode 100644 index 0000000000..64eb4ed092 --- /dev/null +++ b/api/tacticalrmm/integrations/views.py @@ -0,0 +1,55 @@ +from django.shortcuts import get_object_or_404 +from rest_framework.decorators import api_view, permission_classes +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.views import APIView +from rest_framework.exceptions import PermissionDenied +from .models import Integration +from .serializers import GetIntegrationsSerializer, GetIntegrationSerializer + +class GetIntegrations(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, format=None): + integrations = Integration.objects.all().order_by('name') + serializer = GetIntegrationsSerializer(integrations, many=True) + + return Response(serializer.data) + +class GetIntegration(APIView): + permission_classes = [IsAuthenticated] + + # serializer_class = GetIntegrationsSerializer + def get(self, request, pk): + integration = get_object_or_404(Integration, pk=pk) + + return Response(GetIntegrationSerializer(integration).data) + + def post(self, request, pk): + if request.data['enabled'] == True: + integration = get_object_or_404(Integration, pk=pk) + integration.configuration['api_key'] = request.data['apikey'] + integration.configuration['api_url'] = request.data['apiurl'] + integration.configuration['company_id'] = request.data['companyID'] + integration.enabled = True + integration.save() + + return Response("ok") + else: + integration = get_object_or_404(Integration, pk=pk) + integration.configuration['api_key'] = "" + integration.configuration['api_url'] = "" + integration.configuration['company_id'] = "" + integration.enabled = False + integration.save() + + return Response("ok") + + def put(self, request, pk): + integration = get_object_or_404(Integration, pk=pk) + integration.configuration['api_key'] = request.data['apikey'] + integration.configuration['api_url'] = request.data['apiurl'] + integration.configuration['company_id'] = request.data['companyID'] + integration.save() + + return Response("ok") \ No newline at end of file diff --git a/api/tacticalrmm/requirements.txt b/api/tacticalrmm/requirements.txt index 74070aca0e..49fb1f8356 100644 --- a/api/tacticalrmm/requirements.txt +++ b/api/tacticalrmm/requirements.txt @@ -1,6 +1,6 @@ asgiref==3.4.1 asyncio-nats-client==0.11.5 -celery==5.2.1 +celery==5.2.3 certifi==2021.10.8 cffi==1.15.0 channels==3.0.4 @@ -8,7 +8,7 @@ channels_redis==3.3.1 chardet==4.0.0 cryptography==36.0.1 daphne==3.0.2 -Django==3.2.10 +Django==3.2.11 django-cors-headers==3.10.1 django-ipware==4.0.2 django-rest-knox==4.1.0 @@ -17,15 +17,15 @@ future==0.18.2 loguru==0.5.3 msgpack==1.0.3 packaging==21.3 -psycopg2-binary==2.9.2 +psycopg2-binary==2.9.3 pycparser==2.21 pycryptodome==3.12.0 pyotp==2.6.0 pyparsing==3.0.6 pytz==2021.3 qrcode==6.1 -redis==4.0.2 -requests==2.26.0 +redis==4.1.0 +requests==2.27.1 six==1.16.0 sqlparse==0.4.2 twilio==7.4.0 @@ -34,5 +34,5 @@ uWSGI==2.0.20 validators==0.18.2 vine==5.0.0 websockets==9.1 -zipp==3.6.0 -drf_spectacular==0.21.0 \ No newline at end of file +zipp==3.7.0 +drf_spectacular==0.21.1 \ No newline at end of file diff --git a/api/tacticalrmm/scripts/community_scripts.json b/api/tacticalrmm/scripts/community_scripts.json index 1b9a0a8202..1e7b2b2d1f 100644 --- a/api/tacticalrmm/scripts/community_scripts.json +++ b/api/tacticalrmm/scripts/community_scripts.json @@ -209,6 +209,15 @@ "shell": "powershell", "category": "TRMM (Win):Hardware" }, + { + "guid": "2cf918d1-1cc8-4208-bc94-9ca7b34e61c2", + "filename": "Win_Lenovo_Driver_Updates.ps1", + "submittedBy": "https://github.com/maltekiefer", + "name": "Lenovo - Driver Updates", + "description": "Searches the Lenovo support system for new drivers and installs them", + "shell": "powershell", + "category": "TRMM (Win):Hardware" + }, { "guid": "72c56717-28ed-4cc6-b30f-b362d30fb4b6", "filename": "Win_Hardware_SN.ps1", diff --git a/api/tacticalrmm/scripts/models.py b/api/tacticalrmm/scripts/models.py index 1b5def737f..979b889486 100644 --- a/api/tacticalrmm/scripts/models.py +++ b/api/tacticalrmm/scripts/models.py @@ -79,11 +79,8 @@ def replace_with_snippets(cls, code): def hash_script_body(self): from django.conf import settings - msg = self.code.encode() - self.script_hash = hmac.new( - settings.SECRET_KEY.encode(), msg, hashlib.sha256 - ).hexdigest() - self.save() + msg = self.code.encode(errors="ignore") + return hmac.new(settings.SECRET_KEY.encode(), msg, hashlib.sha256).hexdigest() @classmethod def load_community_scripts(cls): diff --git a/api/tacticalrmm/services/views.py b/api/tacticalrmm/services/views.py index 60e8b81806..2d73f6fd4d 100644 --- a/api/tacticalrmm/services/views.py +++ b/api/tacticalrmm/services/views.py @@ -1,8 +1,8 @@ import asyncio from agents.models import Agent -from checks.models import Check from django.shortcuts import get_object_or_404 +from django.conf import settings from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView @@ -15,6 +15,11 @@ class GetServices(APIView): permission_classes = [IsAuthenticated, WinSvcsPerms] def get(self, request, agent_id): + if getattr(settings, "DEMO", False): + from tacticalrmm.demo_views import demo_get_services + + return demo_get_services() + agent = get_object_or_404(Agent, agent_id=agent_id) r = asyncio.run(agent.nats_cmd(data={"func": "winservices"}, timeout=10)) diff --git a/api/tacticalrmm/tacticalrmm/celery.py b/api/tacticalrmm/tacticalrmm/celery.py index cfee60b874..2afa7d4826 100644 --- a/api/tacticalrmm/tacticalrmm/celery.py +++ b/api/tacticalrmm/tacticalrmm/celery.py @@ -37,10 +37,6 @@ "task": "agents.tasks.auto_self_agent_update_task", "schedule": crontab(minute=35, hour="*"), }, - "handle-agents": { - "task": "agents.tasks.handle_agents_task", - "schedule": crontab(minute="*/3"), - }, } @@ -49,7 +45,7 @@ def debug_task(self): print("Request: {0!r}".format(self.request)) -@app.on_after_finalize.connect +@app.on_after_finalize.connect # type: ignore def setup_periodic_tasks(sender, **kwargs): from agents.tasks import agent_outages_task @@ -59,4 +55,4 @@ def setup_periodic_tasks(sender, **kwargs): sender.add_periodic_task(60.0, agent_outages_task.s()) sender.add_periodic_task(60.0 * 30, core_maintenance_tasks.s()) sender.add_periodic_task(60.0 * 60, unsnooze_alerts.s()) - sender.add_periodic_task(90.0, cache_db_fields_task.s()) + sender.add_periodic_task(85.0, cache_db_fields_task.s()) diff --git a/api/tacticalrmm/tacticalrmm/demo_data.py b/api/tacticalrmm/tacticalrmm/demo_data.py new file mode 100644 index 0000000000..439757fd54 --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/demo_data.py @@ -0,0 +1,539 @@ +disks = [ + [ + { + "free": "343.3G", + "used": "121.9G", + "total": "465.3G", + "device": "C:", + "fstype": "NTFS", + "percent": 26, + }, + { + "free": "745.2G", + "used": "1.1T", + "total": "1.8T", + "device": "D:", + "fstype": "NTFS", + "percent": 59, + }, + { + "free": "1.2T", + "used": "669.7G", + "total": "1.8T", + "device": "F:", + "fstype": "NTFS", + "percent": 36, + }, + ], + [ + { + "free": "516.7G", + "used": "413.5G", + "total": "930.2G", + "device": "C:", + "fstype": "NTFS", + "percent": 44, + } + ], + [ + { + "free": "346.5G", + "used": "129.1G", + "total": "475.6G", + "device": "C:", + "fstype": "NTFS", + "percent": 27, + } + ], + [ + { + "free": "84.2G", + "used": "34.4G", + "total": "118.6G", + "device": "C:", + "fstype": "NTFS", + "percent": 29, + } + ], +] + +ping_success_output = """ +Pinging 8.8.8.8 with 32 bytes of data: +Reply from 8.8.8.8: bytes=32 time=28ms TTL=116 +Reply from 8.8.8.8: bytes=32 time=26ms TTL=116 +Reply from 8.8.8.8: bytes=32 time=29ms TTL=116 +Reply from 8.8.8.8: bytes=32 time=23ms TTL=116 + +Ping statistics for 8.8.8.8: + Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), +Approximate round trip times in milli-seconds: + Minimum = 23ms, Maximum = 29ms, Average = 26ms +""" + +ping_fail_output = """ +Pinging 10.42.33.2 with 32 bytes of data: +Request timed out. +Request timed out. +Request timed out. +Request timed out. + +Ping statistics for 10.42.33.2: +Packets: Sent = 4, Received = 0, Lost = 4 (100% loss), +""" + +spooler_stdout = """ +SERVICE_NAME: spooler + TYPE : 110 WIN32_OWN_PROCESS (interactive) + STATE : 3 STOP_PENDING + (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) + WIN32_EXIT_CODE : 0 (0x0) + SERVICE_EXIT_CODE : 0 (0x0) + CHECKPOINT : 0x0 + WAIT_HINT : 0x0 +Deleted file - C:\Windows\System32\spool\printers\FP00004.SHD +Deleted file - C:\Windows\System32\spool\printers\FP00004.SPL + +SERVICE_NAME: spooler + TYPE : 110 WIN32_OWN_PROCESS (interactive) + STATE : 2 START_PENDING + (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) + WIN32_EXIT_CODE : 0 (0x0) + SERVICE_EXIT_CODE : 0 (0x0) + CHECKPOINT : 0x0 + WAIT_HINT : 0x7d0 + PID : 10536 + FLAGS : +""" + + +temp_dir_stdout = """ +Total files: 427 + +{'name': '2E71.tmp', 'size': 7430272, 'mtime': 1581925416.2497344} +{'name': 'AdobeARM.log', 'size': 29451, 'mtime': 1594655619.9011872} +{'name': 'adobegc.log', 'size': 10231328, 'mtime': 1595040481.91346} +{'name': 'adobegc_a00168', 'size': 827, 'mtime': 1587681946.9771478} +{'name': 'adobegc_a00736', 'size': 827, 'mtime': 1588706044.6594567} +{'name': 'adobegc_a01612', 'size': 827, 'mtime': 1580168032.7042644} +{'name': 'adobegc_a01872', 'size': 827, 'mtime': 1588695409.1667633} +{'name': 'adobegc_a02040', 'size': 827, 'mtime': 1586472391.868406} +{'name': 'adobegc_a02076', 'size': 827, 'mtime': 1580250789.654343} +{'name': 'adobegc_a02316', 'size': 827, 'mtime': 1584469722.280189} +{'name': 'adobegc_a02840', 'size': 827, 'mtime': 1580168195.0954776} +{'name': 'adobegc_a02844', 'size': 827, 'mtime': 1588704553.4443035} +{'name': 'adobegc_a02940', 'size': 827, 'mtime': 1588705125.4622736} +{'name': 'adobegc_a03388', 'size': 827, 'mtime': 1588694931.7341642} +{'name': 'adobegc_a03444', 'size': 827, 'mtime': 1588694575.377482} +{'name': 'adobegc_a03468', 'size': 827, 'mtime': 1588705816.5495117} +{'name': 'adobegc_a03516', 'size': 827, 'mtime': 1588695236.1638494} +{'name': 'adobegc_a03660', 'size': 827, 'mtime': 1588694714.0769584} +{'name': 'adobegc_a03668', 'size': 827, 'mtime': 1588791976.2615259} +{'name': 'adobegc_a03984', 'size': 827, 'mtime': 1588708060.4916122} +{'name': 'adobegc_a04244', 'size': 827, 'mtime': 1588882348.195425} +{'name': 'adobegc_a04296', 'size': 827, 'mtime': 1587595547.000954} +{'name': 'adobegc_a04400', 'size': 827, 'mtime': 1588698785.5022683} +{'name': 'adobegc_a04476', 'size': 827, 'mtime': 1588696181.497377} +{'name': 'adobegc_a04672', 'size': 827, 'mtime': 1588707309.2342112} +{'name': 'adobegc_a05072', 'size': 827, 'mtime': 1588718744.760823} +{'name': 'adobegc_a05308', 'size': 827, 'mtime': 1588884352.0702107} +{'name': 'adobegc_a05372', 'size': 827, 'mtime': 1587571313.9485312} +{'name': 'adobegc_a06196', 'size': 826, 'mtime': 1594654959.318391} +{'name': 'adobegc_a07432', 'size': 827, 'mtime': 1588887412.235366} +{'name': 'adobegc_a07592', 'size': 827, 'mtime': 1587768346.7856867} +{'name': 'adobegc_a08336', 'size': 827, 'mtime': 1580251587.8173583} +{'name': 'adobegc_a08540', 'size': 826, 'mtime': 1590517886.4135766} +{'name': 'adobegc_a08676', 'size': 827, 'mtime': 1588796865.261678} +{'name': 'adobegc_a08788', 'size': 827, 'mtime': 1586385998.4148164} +{'name': 'adobegc_a09164', 'size': 827, 'mtime': 1588882638.920801} +{'name': 'adobegc_a10672', 'size': 827, 'mtime': 1580142397.240663} +{'name': 'adobegc_a11260', 'size': 827, 'mtime': 1588791820.5066414} +{'name': 'adobegc_a12180', 'size': 827, 'mtime': 1580146831.0441327} +{'name': 'adobegc_a14468', 'size': 827, 'mtime': 1585674106.878755} +{'name': 'adobegc_a14596', 'size': 827, 'mtime': 1580510788.5562158} +{'name': 'adobegc_a15124', 'size': 826, 'mtime': 1590523889.367007} +{'name': 'adobegc_a15936', 'size': 827, 'mtime': 1580256796.572934} +{'name': 'adobegc_a15992', 'size': 826, 'mtime': 1594664396.6619377} +{'name': 'adobegc_a16976', 'size': 827, 'mtime': 1585674384.4933422} +{'name': 'adobegc_a18972', 'size': 826, 'mtime': 1594748694.4924471} +{'name': 'adobegc_a19836', 'size': 827, 'mtime': 1588880974.3856514} +{'name': 'adobegc_a20168', 'size': 827, 'mtime': 1580256300.931633} +{'name': 'adobegc_a20424', 'size': 826, 'mtime': 1590619548.096738} +{'name': 'adobegc_a20476', 'size': 827, 'mtime': 1580241090.30506} +{'name': 'adobegc_a20696', 'size': 827, 'mtime': 1588883054.266526} +{'name': 'adobegc_a21160', 'size': 827, 'mtime': 1585867545.8835862} +{'name': 'adobegc_a21600', 'size': 827, 'mtime': 1584546053.6350517} +{'name': 'adobegc_a21604', 'size': 827, 'mtime': 1585781145.016732} +{'name': 'adobegc_a23208', 'size': 826, 'mtime': 1594766767.8597474} +{'name': 'adobegc_a23792', 'size': 827, 'mtime': 1587748006.602304} +{'name': 'adobegc_a24996', 'size': 827, 'mtime': 1580337748.2107458} +{'name': 'adobegc_a25280', 'size': 827, 'mtime': 1589561457.17108} +{'name': 'adobegc_a25716', 'size': 827, 'mtime': 1586558746.818827} +{'name': 'adobegc_a26788', 'size': 827, 'mtime': 1589317959.1261017} +{'name': 'adobegc_a29788', 'size': 826, 'mtime': 1594853168.0936923} +{'name': 'adobegc_a30772', 'size': 827, 'mtime': 1586645146.8381186} +{'name': 'adobegc_a30868', 'size': 826, 'mtime': 1590705947.4294834} +{'name': 'adobegc_a33340', 'size': 827, 'mtime': 1580424388.6278617} +{'name': 'adobegc_a34072', 'size': 826, 'mtime': 1591036884.930815} +{'name': 'adobegc_a34916', 'size': 827, 'mtime': 1589063225.3951604} +{'name': 'adobegc_a36312', 'size': 826, 'mtime': 1590792347.1066074} +{'name': 'adobegc_a36732', 'size': 827, 'mtime': 1587941146.7667546} +{'name': 'adobegc_a37684', 'size': 826, 'mtime': 1591051545.0491257} +{'name': 'adobegc_a38820', 'size': 826, 'mtime': 1594939568.850206} +{'name': 'adobegc_a39800', 'size': 827, 'mtime': 1586731547.200965} +{'name': 'adobegc_a39968', 'size': 827, 'mtime': 1585953945.0148494} +{'name': 'adobegc_a40276', 'size': 827, 'mtime': 1580774658.3211977} +{'name': 'adobegc_a40312', 'size': 827, 'mtime': 1589237146.946895} +{'name': 'adobegc_a40988', 'size': 827, 'mtime': 1586817946.949773} +{'name': 'adobegc_a40992', 'size': 827, 'mtime': 1580770793.4948478} +{'name': 'adobegc_a41180', 'size': 827, 'mtime': 1588027546.7357743} +{'name': 'adobegc_a41188', 'size': 826, 'mtime': 1595009475.295114} +{'name': 'adobegc_a41640', 'size': 826, 'mtime': 1590878747.5881732} +{'name': 'adobegc_a42100', 'size': 827, 'mtime': 1589150748.9527063} +{'name': 'adobegc_a43012', 'size': 827, 'mtime': 1580683588.5658195} +{'name': 'adobegc_a44676', 'size': 827, 'mtime': 1580597188.6451297} +{'name': 'adobegc_a45184', 'size': 827, 'mtime': 1586904346.5828853} +{'name': 'adobegc_a45308', 'size': 826, 'mtime': 1595025969.4777381} +{'name': 'adobegc_a46804', 'size': 827, 'mtime': 1580772007.5569854} +{'name': 'adobegc_a47368', 'size': 827, 'mtime': 1588100330.3886814} +{'name': 'adobegc_a47428', 'size': 827, 'mtime': 1589307202.4241476} +{'name': 'adobegc_a48120', 'size': 827, 'mtime': 1587061429.3050117} +{'name': 'adobegc_a48264', 'size': 827, 'mtime': 1586040345.9605994} +{'name': 'adobegc_a49348', 'size': 827, 'mtime': 1589308572.5917764} +{'name': 'adobegc_a50068', 'size': 827, 'mtime': 1589823616.2651317} +{'name': 'adobegc_a50512', 'size': 827, 'mtime': 1588113946.9230535} +{'name': 'adobegc_a54396', 'size': 826, 'mtime': 1590965147.3472395} +{'name': 'adobegc_a55764', 'size': 827, 'mtime': 1586126745.5002806} +{'name': 'adobegc_a56868', 'size': 827, 'mtime': 1584988994.5648835} +{'name': 'adobegc_a56920', 'size': 827, 'mtime': 1589826940.2840052} +{'name': 'adobegc_a58060', 'size': 827, 'mtime': 1588200346.9590664} +{'name': 'adobegc_a58664', 'size': 827, 'mtime': 1580772553.408082} +{'name': 'adobegc_a58836', 'size': 827, 'mtime': 1586213145.9856122} +{'name': 'adobegc_a58952', 'size': 827, 'mtime': 1580769957.2542257} +{'name': 'adobegc_a59448', 'size': 827, 'mtime': 1586191309.3788278} +{'name': 'adobegc_a59920', 'size': 827, 'mtime': 1580837382.8384278} +{'name': 'adobegc_a60092', 'size': 827, 'mtime': 1589820894.3119876} +{'name': 'adobegc_a60188', 'size': 827, 'mtime': 1580773319.7630682} +{'name': 'adobegc_a60376', 'size': 827, 'mtime': 1584984234.995152} +{'name': 'adobegc_a60836', 'size': 827, 'mtime': 1586990747.0581498} +{'name': 'adobegc_a61768', 'size': 826, 'mtime': 1591035116.5898964} +{'name': 'adobegc_a62200', 'size': 827, 'mtime': 1586195417.8275757} +{'name': 'adobegc_a62432', 'size': 827, 'mtime': 1580942790.5409286} +{'name': 'adobegc_a65288', 'size': 827, 'mtime': 1588373147.0190327} +{'name': 'adobegc_a65332', 'size': 827, 'mtime': 1580838023.0994027} +{'name': 'adobegc_a65672', 'size': 826, 'mtime': 1591133604.032657} +{'name': 'adobegc_a66164', 'size': 827, 'mtime': 1580837511.0639248} +{'name': 'adobegc_a66532', 'size': 827, 'mtime': 1587077146.9995973} +{'name': 'adobegc_a66744', 'size': 827, 'mtime': 1587061281.624075} +{'name': 'adobegc_a68000', 'size': 826, 'mtime': 1591137947.4248047} +{'name': 'adobegc_a68072', 'size': 827, 'mtime': 1589928347.070936} +{'name': 'adobegc_a68720', 'size': 827, 'mtime': 1581029189.2618403} +{'name': 'adobegc_a68848', 'size': 827, 'mtime': 1587163546.6515636} +{'name': 'adobegc_a69732', 'size': 827, 'mtime': 1580930519.3353608} +{'name': 'adobegc_a70528', 'size': 827, 'mtime': 1589841947.731212} +{'name': 'adobegc_a71096', 'size': 827, 'mtime': 1580920745.8008296} +{'name': 'adobegc_a71132', 'size': 827, 'mtime': 1586299545.3437998} +{'name': 'adobegc_a71648', 'size': 827, 'mtime': 1581031075.2702963} +{'name': 'adobegc_a72972', 'size': 827, 'mtime': 1588626359.7385614} +{'name': 'adobegc_a75840', 'size': 826, 'mtime': 1591373471.8618608} +{'name': 'adobegc_a76096', 'size': 827, 'mtime': 1581030280.123038} +{'name': 'adobegc_a76636', 'size': 827, 'mtime': 1581010194.8814292} +{'name': 'adobegc_a76928', 'size': 827, 'mtime': 1586368563.2366085} +{'name': 'adobegc_a78272', 'size': 827, 'mtime': 1588459547.364358} +{'name': 'adobegc_a78448', 'size': 827, 'mtime': 1589755547.709028} +{'name': 'adobegc_a78868', 'size': 827, 'mtime': 1587249947.0512784} +{'name': 'adobegc_a79232', 'size': 827, 'mtime': 1590014747.2459671} +{'name': 'adobegc_a80708', 'size': 827, 'mtime': 1587854746.995757} +{'name': 'adobegc_a81928', 'size': 826, 'mtime': 1591387037.7909682} +{'name': 'adobegc_a82640', 'size': 827, 'mtime': 1588620563.6037686} +{'name': 'adobegc_a84680', 'size': 827, 'mtime': 1588622988.5522242} +{'name': 'adobegc_a86668', 'size': 827, 'mtime': 1588632347.3290584} +{'name': 'adobegc_a87760', 'size': 826, 'mtime': 1591389738.9057505} +{'name': 'adobegc_a87796', 'size': 827, 'mtime': 1588620113.9931662} +{'name': 'adobegc_a88000', 'size': 827, 'mtime': 1587336346.5873897} +{'name': 'adobegc_a88772', 'size': 827, 'mtime': 1588545946.2672083} +{'name': 'adobegc_a88864', 'size': 826, 'mtime': 1591388571.4809685} +{'name': 'adobegc_a90492', 'size': 826, 'mtime': 1591569945.3237975} +{'name': 'adobegc_a90536', 'size': 827, 'mtime': 1588615525.34365} +{'name': 'adobegc_a90696', 'size': 827, 'mtime': 1588618638.6518161} +{'name': 'adobegc_a92020', 'size': 827, 'mtime': 1588626079.888435} +{'name': 'adobegc_a92036', 'size': 827, 'mtime': 1588883650.2998574} +{'name': 'adobegc_a92060', 'size': 827, 'mtime': 1587422746.7982752} +{'name': 'adobegc_a92332', 'size': 827, 'mtime': 1588617429.6228204} +{'name': 'adobegc_a92708', 'size': 827, 'mtime': 1588621683.480289} +{'name': 'adobegc_a93576', 'size': 827, 'mtime': 1588611949.1138964} +{'name': 'adobegc_a93952', 'size': 826, 'mtime': 1591483547.0099566} +{'name': 'adobegc_a93968', 'size': 827, 'mtime': 1588619947.3429031} +{'name': 'adobegc_a94188', 'size': 827, 'mtime': 1588625869.6090748} +{'name': 'adobegc_a94428', 'size': 827, 'mtime': 1588625083.0555425} +{'name': 'adobegc_a94564', 'size': 827, 'mtime': 1587400776.9892576} +{'name': 'adobegc_a94620', 'size': 827, 'mtime': 1588616005.2649503} +{'name': 'adobegc_a94672', 'size': 827, 'mtime': 1588608305.686614} +{'name': 'adobegc_a95104', 'size': 827, 'mtime': 1588619862.1936185} +{'name': 'adobegc_a95268', 'size': 827, 'mtime': 1588618316.1273627} +{'name': 'adobegc_a95992', 'size': 827, 'mtime': 1588625699.327125} +{'name': 'adobegc_a96116', 'size': 827, 'mtime': 1588625465.4000483} +{'name': 'adobegc_a96140', 'size': 827, 'mtime': 1588707579.585134} +{'name': 'adobegc_a96196', 'size': 827, 'mtime': 1588616659.9653125} +{'name': 'adobegc_a96264', 'size': 827, 'mtime': 1588624388.424492} +{'name': 'adobegc_a96396', 'size': 827, 'mtime': 1588619230.3394928} +{'name': 'adobegc_a97428', 'size': 827, 'mtime': 1587509147.0930684} +{'name': 'adobegc_a97480', 'size': 827, 'mtime': 1589669147.1720312} +{'name': 'adobegc_a97532', 'size': 827, 'mtime': 1588623710.0535893} +{'name': 'adobegc_a97576', 'size': 827, 'mtime': 1588699829.405278} +{'name': 'adobegc_a97888', 'size': 827, 'mtime': 1588700236.4738493} +{'name': 'adobegc_a97936', 'size': 827, 'mtime': 1588705581.3051977} +{'name': 'adobegc_a98628', 'size': 827, 'mtime': 1588707770.5158248} +{'name': 'adobegc_a98676', 'size': 827, 'mtime': 1588707160.0849242} +{'name': 'adobegc_a99320', 'size': 827, 'mtime': 1588286747.3271153} +{'name': 'adobegc_a99416', 'size': 827, 'mtime': 1588705913.0032701} +{'name': 'adobegc_a99776', 'size': 827, 'mtime': 1588695055.6383822} +{'name': 'adobegc_a99944', 'size': 827, 'mtime': 1588700090.9956398} +{'name': 'adobegc_b00736', 'size': 827, 'mtime': 1588706066.725238} +{'name': 'adobegc_b01872', 'size': 827, 'mtime': 1588695416.625433} +{'name': 'adobegc_b02844', 'size': 827, 'mtime': 1588704612.7520032} +{'name': 'adobegc_b02940', 'size': 827, 'mtime': 1588705218.2862568} +{'name': 'adobegc_b03516', 'size': 827, 'mtime': 1588695279.1507645} +{'name': 'adobegc_b03668', 'size': 827, 'mtime': 1588791984.8225732} +{'name': 'adobegc_b03984', 'size': 827, 'mtime': 1588708170.4855063} +{'name': 'adobegc_b04400', 'size': 827, 'mtime': 1588698790.8114717} +{'name': 'adobegc_b06196', 'size': 826, 'mtime': 1594655070.3379285} +{'name': 'adobegc_b08540', 'size': 826, 'mtime': 1590517989.972172} +{'name': 'adobegc_b08676', 'size': 827, 'mtime': 1588796952.7518158} +{'name': 'adobegc_b11260', 'size': 827, 'mtime': 1588791830.28458} +{'name': 'adobegc_b12180', 'size': 827, 'mtime': 1580146854.104489} +{'name': 'adobegc_b14468', 'size': 827, 'mtime': 1585674135.6150348} +{'name': 'adobegc_b15992', 'size': 826, 'mtime': 1594664406.76352} +{'name': 'adobegc_b18972', 'size': 826, 'mtime': 1594748752.0301268} +{'name': 'adobegc_b20424', 'size': 826, 'mtime': 1590619550.6114154} +{'name': 'adobegc_b20696', 'size': 827, 'mtime': 1588883091.2836785} +{'name': 'adobegc_b25280', 'size': 827, 'mtime': 1589561471.058807} +{'name': 'adobegc_b26788', 'size': 827, 'mtime': 1589318049.2721062} +{'name': 'adobegc_b30868', 'size': 826, 'mtime': 1590705949.9086082} +{'name': 'adobegc_b34072', 'size': 826, 'mtime': 1591036916.1677504} +{'name': 'adobegc_b36312', 'size': 826, 'mtime': 1590792349.6286027} +{'name': 'adobegc_b37684', 'size': 826, 'mtime': 1591051547.7088954} +{'name': 'adobegc_b41188', 'size': 826, 'mtime': 1595009499.2530031} +{'name': 'adobegc_b41640', 'size': 826, 'mtime': 1590878750.2055979} +{'name': 'adobegc_b48120', 'size': 827, 'mtime': 1587061437.18547} +{'name': 'adobegc_b49348', 'size': 827, 'mtime': 1589308608.9336922} +{'name': 'adobegc_b50068', 'size': 827, 'mtime': 1589823624.2151668} +{'name': 'adobegc_b54396', 'size': 826, 'mtime': 1590965149.8471487} +{'name': 'adobegc_b56868', 'size': 827, 'mtime': 1584989020.8257363} +{'name': 'adobegc_b56920', 'size': 827, 'mtime': 1589826973.5304308} +{'name': 'adobegc_b58952', 'size': 827, 'mtime': 1580770043.2167466} +{'name': 'adobegc_b59448', 'size': 827, 'mtime': 1586191317.2202032} +{'name': 'adobegc_b60376', 'size': 827, 'mtime': 1584984269.807791} +{'name': 'adobegc_b68000', 'size': 826, 'mtime': 1591137949.8555748} +{'name': 'adobegc_b68072', 'size': 827, 'mtime': 1589928349.6981187} +{'name': 'adobegc_b70528', 'size': 827, 'mtime': 1589841950.8458745} +{'name': 'adobegc_b71096', 'size': 827, 'mtime': 1580920761.6914532} +{'name': 'adobegc_b72972', 'size': 827, 'mtime': 1588626390.183644} +{'name': 'adobegc_b76636', 'size': 827, 'mtime': 1581010200.9350817} +{'name': 'adobegc_b78448', 'size': 827, 'mtime': 1589755550.4021} +{'name': 'adobegc_b79232', 'size': 827, 'mtime': 1590014749.9412005} +{'name': 'adobegc_b82640', 'size': 827, 'mtime': 1588620586.923453} +{'name': 'adobegc_b84680', 'size': 827, 'mtime': 1588623002.5390074} +{'name': 'adobegc_b87796', 'size': 827, 'mtime': 1588620149.2323031} +{'name': 'adobegc_b90536', 'size': 827, 'mtime': 1588615561.6454446} +{'name': 'adobegc_b90696', 'size': 827, 'mtime': 1588618646.516128} +{'name': 'adobegc_b92020', 'size': 827, 'mtime': 1588626116.4113202} +{'name': 'adobegc_b92332', 'size': 827, 'mtime': 1588617466.6833763} +{'name': 'adobegc_b92708', 'size': 827, 'mtime': 1588621723.2322977} +{'name': 'adobegc_b93968', 'size': 827, 'mtime': 1588619970.3566632} +{'name': 'adobegc_b94188', 'size': 827, 'mtime': 1588625878.801097} +{'name': 'adobegc_b94428', 'size': 827, 'mtime': 1588625091.057683} +{'name': 'adobegc_b94564', 'size': 827, 'mtime': 1587400800.9059412} +{'name': 'adobegc_b95268', 'size': 827, 'mtime': 1588618334.0967414} +{'name': 'adobegc_b95992', 'size': 827, 'mtime': 1588625737.972303} +{'name': 'adobegc_b96116', 'size': 827, 'mtime': 1588625472.4204888} +{'name': 'adobegc_b96196', 'size': 827, 'mtime': 1588616768.8672354} +{'name': 'adobegc_b96396', 'size': 827, 'mtime': 1588619236.3330257} +{'name': 'adobegc_b97480', 'size': 827, 'mtime': 1589669149.7252228} +{'name': 'adobegc_b97532', 'size': 827, 'mtime': 1588623738.1396592} +{'name': 'adobegc_b97576', 'size': 827, 'mtime': 1588699862.141512} +{'name': 'adobegc_b97888', 'size': 827, 'mtime': 1588700318.3893816} +{'name': 'adobegc_b97936', 'size': 827, 'mtime': 1588705599.7656307} +{'name': 'adobegc_b98628', 'size': 827, 'mtime': 1588707795.8756163} +{'name': 'adobegc_b99416', 'size': 827, 'mtime': 1588705935.8479679} +{'name': 'adobegc_b99776', 'size': 827, 'mtime': 1588695083.277253} +{'name': 'adobegc_b99944', 'size': 827, 'mtime': 1588700116.4428499} +{'name': 'adobegc_c00736', 'size': 827, 'mtime': 1588706144.523482} +{'name': 'adobegc_c01872', 'size': 827, 'mtime': 1588695424.6709175} +{'name': 'adobegc_c02844', 'size': 827, 'mtime': 1588704655.3452854} +{'name': 'adobegc_c02940', 'size': 827, 'mtime': 1588705301.4180279} +{'name': 'adobegc_c03984', 'size': 827, 'mtime': 1588708227.6767087} +{'name': 'adobegc_c04400', 'size': 827, 'mtime': 1588698805.7789137} +{'name': 'adobegc_c08676', 'size': 827, 'mtime': 1588796987.8076794} +{'name': 'adobegc_c11260', 'size': 827, 'mtime': 1588791857.2477975} +{'name': 'adobegc_c12180', 'size': 827, 'mtime': 1580146876.464384} +{'name': 'adobegc_c15992', 'size': 826, 'mtime': 1594664430.9030519} +{'name': 'adobegc_c20696', 'size': 827, 'mtime': 1588883097.26129} +{'name': 'adobegc_c25280', 'size': 827, 'mtime': 1589561487.9573958} +{'name': 'adobegc_c26788', 'size': 827, 'mtime': 1589318109.375684} +{'name': 'adobegc_c34072', 'size': 826, 'mtime': 1591036933.363417} +{'name': 'adobegc_c48120', 'size': 827, 'mtime': 1587061454.0755453} +{'name': 'adobegc_c56920', 'size': 827, 'mtime': 1589826993.0616467} +{'name': 'adobegc_c59448', 'size': 827, 'mtime': 1586191349.8506114} +{'name': 'adobegc_c60376', 'size': 827, 'mtime': 1584984292.1612866} +{'name': 'adobegc_c72972', 'size': 827, 'mtime': 1588626413.0896137} +{'name': 'adobegc_c76636', 'size': 827, 'mtime': 1581010218.0554078} +{'name': 'adobegc_c82640', 'size': 827, 'mtime': 1588620613.321756} +{'name': 'adobegc_c84680', 'size': 827, 'mtime': 1588623117.9436429} +{'name': 'adobegc_c87796', 'size': 827, 'mtime': 1588620230.1520216} +{'name': 'adobegc_c92020', 'size': 827, 'mtime': 1588626141.4125187} +{'name': 'adobegc_c92332', 'size': 827, 'mtime': 1588617496.3456864} +{'name': 'adobegc_c93968', 'size': 827, 'mtime': 1588619998.5936964} +{'name': 'adobegc_c94428', 'size': 827, 'mtime': 1588625116.0481493} +{'name': 'adobegc_c94564', 'size': 827, 'mtime': 1587400814.941493} +{'name': 'adobegc_c95268', 'size': 827, 'mtime': 1588618430.4614644} +{'name': 'adobegc_c95992', 'size': 827, 'mtime': 1588625744.1483426} +{'name': 'adobegc_c97532', 'size': 827, 'mtime': 1588623768.123971} +{'name': 'adobegc_c97576', 'size': 827, 'mtime': 1588699912.811693} +{'name': 'adobegc_c98628', 'size': 827, 'mtime': 1588707823.850915} +{'name': 'adobegc_c99416', 'size': 827, 'mtime': 1588705942.7441413} +{'name': 'adobegc_c99944', 'size': 827, 'mtime': 1588700140.0327764} +{'name': 'adobegc_d00736', 'size': 827, 'mtime': 1588706212.1906126} +{'name': 'adobegc_d02844', 'size': 827, 'mtime': 1588704712.9487145} +{'name': 'adobegc_d02940', 'size': 827, 'mtime': 1588705320.1099153} +{'name': 'adobegc_d03984', 'size': 827, 'mtime': 1588708248.2397952} +{'name': 'adobegc_d04400', 'size': 827, 'mtime': 1588698820.0670853} +{'name': 'adobegc_d12180', 'size': 827, 'mtime': 1580146895.6547296} +{'name': 'adobegc_d15992', 'size': 826, 'mtime': 1594664447.5050478} +{'name': 'adobegc_d20696', 'size': 827, 'mtime': 1588883151.742091} +{'name': 'adobegc_d34072', 'size': 826, 'mtime': 1591036946.3382795} +{'name': 'adobegc_d56920', 'size': 827, 'mtime': 1589827011.6453788} +{'name': 'adobegc_d59448', 'size': 827, 'mtime': 1586191396.4112055} +{'name': 'adobegc_d60376', 'size': 827, 'mtime': 1584984310.4665244} +{'name': 'adobegc_d72972', 'size': 827, 'mtime': 1588626429.153277} +{'name': 'adobegc_d76636', 'size': 827, 'mtime': 1581010315.7584887} +{'name': 'adobegc_d82640', 'size': 827, 'mtime': 1588620653.094543} +{'name': 'adobegc_d84680', 'size': 827, 'mtime': 1588623140.4772713} +{'name': 'adobegc_d87796', 'size': 827, 'mtime': 1588620294.8475337} +{'name': 'adobegc_d92020', 'size': 827, 'mtime': 1588626228.1945815} +{'name': 'adobegc_d94428', 'size': 827, 'mtime': 1588625122.2906866} +{'name': 'adobegc_d94564', 'size': 827, 'mtime': 1587400828.0741277} +{'name': 'adobegc_d95268', 'size': 827, 'mtime': 1588618440.307652} +{'name': 'adobegc_d97532', 'size': 827, 'mtime': 1588623787.4921527} +{'name': 'adobegc_d97576', 'size': 827, 'mtime': 1588699931.81901} +{'name': 'adobegc_d98628', 'size': 827, 'mtime': 1588707855.1049612} +{'name': 'adobegc_e00736', 'size': 827, 'mtime': 1588706245.611989} +{'name': 'adobegc_e02844', 'size': 827, 'mtime': 1588704734.7796671} +{'name': 'adobegc_e02940', 'size': 827, 'mtime': 1588705346.8015952} +{'name': 'adobegc_e03984', 'size': 827, 'mtime': 1588708267.3839262} +{'name': 'adobegc_e04400', 'size': 827, 'mtime': 1588698844.0438626} +{'name': 'adobegc_e12180', 'size': 827, 'mtime': 1580146918.2748847} +{'name': 'adobegc_e15992', 'size': 826, 'mtime': 1594664462.674065} +{'name': 'adobegc_e34072', 'size': 826, 'mtime': 1591036960.5743244} +{'name': 'adobegc_e56920', 'size': 827, 'mtime': 1589827029.9772768} +{'name': 'adobegc_e59448', 'size': 827, 'mtime': 1586191423.5797856} +{'name': 'adobegc_e60376', 'size': 827, 'mtime': 1584984320.550245} +{'name': 'adobegc_e72972', 'size': 827, 'mtime': 1588626449.11985} +{'name': 'adobegc_e82640', 'size': 827, 'mtime': 1588620658.7476456} +{'name': 'adobegc_e84680', 'size': 827, 'mtime': 1588623162.9596686} +{'name': 'adobegc_e87796', 'size': 827, 'mtime': 1588620363.3213055} +{'name': 'adobegc_e92020', 'size': 827, 'mtime': 1588626236.2562673} +{'name': 'adobegc_e94428', 'size': 827, 'mtime': 1588625177.8788607} +{'name': 'adobegc_e94564', 'size': 827, 'mtime': 1587400848.3485818} +{'name': 'adobegc_e97532', 'size': 827, 'mtime': 1588623800.5197835} +{'name': 'adobegc_e97576', 'size': 827, 'mtime': 1588699954.884931} +{'name': 'adobegc_e98628', 'size': 827, 'mtime': 1588707930.3610473} +{'name': 'adobegc_f00736', 'size': 827, 'mtime': 1588706262.6876884} +{'name': 'adobegc_f02844', 'size': 827, 'mtime': 1588704857.8128686} +{'name': 'adobegc_f02940', 'size': 827, 'mtime': 1588705386.8754816} +{'name': 'adobegc_f03984', 'size': 827, 'mtime': 1588708377.0388029} +{'name': 'adobegc_f04400', 'size': 827, 'mtime': 1588698865.876907} +{'name': 'adobegc_f12180', 'size': 827, 'mtime': 1580146941.4048574} +{'name': 'adobegc_f15992', 'size': 826, 'mtime': 1594664480.5364697} +{'name': 'adobegc_f59448', 'size': 827, 'mtime': 1586191468.308414} +{'name': 'adobegc_f60376', 'size': 827, 'mtime': 1584984342.4760692} +{'name': 'adobegc_f72972', 'size': 827, 'mtime': 1588626520.413051} +{'name': 'adobegc_f82640', 'size': 827, 'mtime': 1588620707.6957185} +{'name': 'adobegc_f84680', 'size': 827, 'mtime': 1588623185.9664042} +{'name': 'adobegc_f87796', 'size': 827, 'mtime': 1588620372.2095447} +{'name': 'adobegc_f94428', 'size': 827, 'mtime': 1588625198.4473124} +{'name': 'adobegc_f98628', 'size': 827, 'mtime': 1588707956.3923628} +{'name': 'adobegc_g00736', 'size': 827, 'mtime': 1588706340.7434888} +{'name': 'adobegc_g02844', 'size': 827, 'mtime': 1588704879.0104535} +{'name': 'adobegc_g02940', 'size': 827, 'mtime': 1588705417.8788993} +{'name': 'adobegc_g03984', 'size': 827, 'mtime': 1588708394.9106903} +{'name': 'adobegc_g04400', 'size': 827, 'mtime': 1588698895.7362301} +{'name': 'adobegc_g12180', 'size': 827, 'mtime': 1580146949.484896} +{'name': 'adobegc_g72972', 'size': 827, 'mtime': 1588626624.4677527} +{'name': 'adobegc_g82640', 'size': 827, 'mtime': 1588620723.5959775} +{'name': 'adobegc_g84680', 'size': 827, 'mtime': 1588623225.1320856} +{'name': 'adobegc_g87796', 'size': 827, 'mtime': 1588620425.5512018} +{'name': 'adobegc_g94428', 'size': 827, 'mtime': 1588625228.557094} +{'name': 'adobegc_h00736', 'size': 827, 'mtime': 1588706456.0406094} +{'name': 'adobegc_h02844', 'size': 827, 'mtime': 1588704948.776196} +{'name': 'adobegc_h02940', 'size': 827, 'mtime': 1588705450.0687082} +{'name': 'adobegc_h03984', 'size': 827, 'mtime': 1588708415.418625} +{'name': 'adobegc_h04400', 'size': 827, 'mtime': 1588698929.891593} +{'name': 'adobegc_h12180', 'size': 827, 'mtime': 1580146955.5651238} +{'name': 'adobegc_h82640', 'size': 827, 'mtime': 1588620743.5954738} +{'name': 'adobegc_h84680', 'size': 827, 'mtime': 1588623352.3280022} +{'name': 'adobegc_h87796', 'size': 827, 'mtime': 1588620447.1586652} +{'name': 'adobegc_h94428', 'size': 827, 'mtime': 1588625239.4658115} +{'name': 'adobegc_i00736', 'size': 827, 'mtime': 1588706484.0562284} +{'name': 'adobegc_i02940', 'size': 827, 'mtime': 1588705465.7495365} +{'name': 'adobegc_i03984', 'size': 827, 'mtime': 1588708539.8739815} +{'name': 'adobegc_i04400', 'size': 827, 'mtime': 1588698952.9581492} +{'name': 'adobegc_i12180', 'size': 827, 'mtime': 1580147014.8754144} +{'name': 'adobegc_i82640', 'size': 827, 'mtime': 1588620751.6867297} +{'name': 'adobegc_i84680', 'size': 827, 'mtime': 1588623400.7245765} +{'name': 'adobegc_i87796', 'size': 827, 'mtime': 1588620470.659986} +{'name': 'adobegc_i94428', 'size': 827, 'mtime': 1588625266.8207235} +{'name': 'adobegc_j00736', 'size': 827, 'mtime': 1588706506.187664} +{'name': 'adobegc_j03984', 'size': 827, 'mtime': 1588708569.6812017} +{'name': 'adobegc_j04400', 'size': 827, 'mtime': 1588698970.8107784} +{'name': 'adobegc_j12180', 'size': 827, 'mtime': 1580147035.305319} +{'name': 'adobegc_j82640', 'size': 827, 'mtime': 1588620768.686572} +{'name': 'adobegc_j87796', 'size': 827, 'mtime': 1588620476.2220924} +{'name': 'adobegc_j94428', 'size': 827, 'mtime': 1588625305.749532} +{'name': 'adobegc_k00736', 'size': 827, 'mtime': 1588706597.5977101} +{'name': 'adobegc_k03984', 'size': 827, 'mtime': 1588708585.727807} +{'name': 'adobegc_k04400', 'size': 827, 'mtime': 1588699002.9317427} +{'name': 'adobegc_k12180', 'size': 827, 'mtime': 1580147056.48849} +{'name': 'adobegc_k94428', 'size': 827, 'mtime': 1588625326.7249243} +{'name': 'adobegc_l00736', 'size': 827, 'mtime': 1588706650.0458724} +{'name': 'adobegc_l04400', 'size': 827, 'mtime': 1588699173.7167861} +{'name': 'adobegc_l12180', 'size': 827, 'mtime': 1580147075.7756407} +{'name': 'adobegc_m00736', 'size': 827, 'mtime': 1588706696.6210747} +{'name': 'adobegc_m04400', 'size': 827, 'mtime': 1588699299.9061432} +{'name': 'adobegc_n00736', 'size': 827, 'mtime': 1588706702.6324935} +{'name': 'adobegc_n04400', 'size': 827, 'mtime': 1588699322.7834435} +{'name': 'adobegc_o04400', 'size': 827, 'mtime': 1588699343.7964466} +{'name': 'adobegc_p04400', 'size': 827, 'mtime': 1588699361.8530748} +{'name': 'adobegc_q04400', 'size': 827, 'mtime': 1588699435.7401783} +{'name': 'adobegc_r04400', 'size': 827, 'mtime': 1588699497.8403273} +{'name': 'adobegc_s04400', 'size': 827, 'mtime': 1588699564.148772} +{'name': 'adobegc_t04400', 'size': 827, 'mtime': 1588699581.2896767} +{'name': 'adobegc_u04400', 'size': 827, 'mtime': 1588699598.6942072} +{'name': 'adobegc_v04400', 'size': 827, 'mtime': 1588699628.5083873} +{'name': 'adobegc_w04400', 'size': 827, 'mtime': 1588699651.7972827} +{'name': 'AdobeIPCBrokerCustomHook.log', 'size': 110, 'mtime': 1594148255.931315} +{'name': 'ArmUI.ini', 'size': 257928, 'mtime': 1594655604.2703094} +{'name': 'bep_ie_tmp.log', 'size': 5750, 'mtime': 1594630046.8321078} +{'name': 'BROMJ6945DW.INI', 'size': 164, 'mtime': 1594932054.8597217} +{'name': 'CCSF_DebugLog.log', 'size': 22720, 'mtime': 1594619167.7750485} +{'name': 'chrome_installer.log', 'size': 215231, 'mtime': 1593199121.0920432} +{'name': 'dd_vcredist_amd64_20200710192056.log', 'size': 9218, 'mtime': 1594434073.4356828} +{'name': 'dd_vcredist_amd64_20200710192056_000_vcRuntimeMinimum_x64.log', 'size': 340038, 'mtime': 1594434071.8020437} +{'name': 'dd_vcredist_amd64_20200710192056_001_vcRuntimeAdditional_x64.log', 'size': 195928, 'mtime': 1594434073.3878088} +{'name': 'FXSAPIDebugLogFile.txt', 'size': 0, 'mtime': 1580005774.2871478} +{'name': 'FXSTIFFDebugLogFile.txt', 'size': 0, 'mtime': 1580005774.2402809} +{'name': 'install.ps1', 'size': 22662, 'mtime': 1594434168.2012112} +{'name': 'logserver.exe', 'size': 360392, 'mtime': 1591966026.0} +{'name': 'MpCmdRun.log', 'size': 414950, 'mtime': 1595033174.3764453} +{'name': 'Ofcdebug.ini', 'size': 2208, 'mtime': 1594619167.7125623} +{'name': 'ofcpipc.dll', 'size': 439232, 'mtime': 1591380338.0} +{'name': 'PDApp.log', 'size': 450550, 'mtime': 1594148263.081737} +{'name': 'show_temp_dir.py', 'size': 505, 'mtime': 1595040826.2968051} +{'name': 'tem33F0.tmp', 'size': 68, 'mtime': 1580005493.3622465} +{'name': 'temE0A2.tmp', 'size': 206, 'mtime': 1580005825.1382103} +{'name': 'tmdbg20.dll', 'size': 264648, 'mtime': 1591966082.0} +{'name': 'tm_icrcL_A606D985_38CA_41ab_BCD9_60F771CF800D', 'size': 0, 'mtime': 1594629977.2000608} +{'name': 'TS_3AD6.tmp', 'size': 262144, 'mtime': 1594629969.3296628} +{'name': 'TS_A4CE.tmp', 'size': 327680, 'mtime': 1594629996.4481225} +{'name': 'winagent-v0.9.4.exe', 'size': 13265088, 'mtime': 1594615216.1575873} +{'name': 'wuredist.cab', 'size': 6295, 'mtime': 1594458610.4993813} +""" diff --git a/api/tacticalrmm/tacticalrmm/demo_views.py b/api/tacticalrmm/tacticalrmm/demo_views.py new file mode 100644 index 0000000000..02fab30f03 --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/demo_views.py @@ -0,0 +1,42 @@ +import json +from django.conf import settings +import random +from rest_framework.response import Response + +SVC_FILE = settings.BASE_DIR.joinpath("tacticalrmm/test_data/winsvcs.json") +PROCS_FILE = settings.BASE_DIR.joinpath("tacticalrmm/test_data/procs.json") +EVT_LOG_FILE = settings.BASE_DIR.joinpath("tacticalrmm/test_data/appeventlog.json") + + +def demo_get_services(): + with open(SVC_FILE, "r") as f: + svcs = json.load(f) + + return Response(svcs) + + +# simulate realtime process monitor +def demo_get_procs(): + with open(PROCS_FILE, "r") as f: + procs = json.load(f) + + ret = [] + for proc in procs: + tmp = {} + for _, _ in proc.items(): + tmp["name"] = proc["name"] + tmp["pid"] = proc["pid"] + tmp["membytes"] = random.randrange(423424, 938921325) + tmp["username"] = proc["username"] + tmp["id"] = proc["id"] + tmp["cpu_percent"] = "{:.2f}".format(random.uniform(0.1, 99.4)) + ret.append(tmp) + + return Response(ret) + + +def demo_get_eventlog(): + with open(EVT_LOG_FILE, "r") as f: + logs = json.load(f) + + return Response(logs) diff --git a/api/tacticalrmm/tacticalrmm/middleware.py b/api/tacticalrmm/tacticalrmm/middleware.py index 90e41791d2..07f93d1245 100644 --- a/api/tacticalrmm/tacticalrmm/middleware.py +++ b/api/tacticalrmm/tacticalrmm/middleware.py @@ -93,3 +93,61 @@ def __call__(self, request): request._client_ip = client_ip response = self.get_response(request) return response + + +class DemoMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + self.not_allowed = [ + {"name": "AgentProcesses", "methods": ["DELETE"]}, + {"name": "AgentMeshCentral", "methods": ["GET", "POST"]}, + {"name": "update_agents", "methods": ["POST"]}, + {"name": "send_raw_cmd", "methods": ["POST"]}, + {"name": "install_agent", "methods": ["POST"]}, + {"name": "get_mesh_exe", "methods": ["POST"]}, + {"name": "GenerateAgent", "methods": ["GET"]}, + {"name": "UploadMeshAgent", "methods": ["PUT"]}, + {"name": "email_test", "methods": ["POST"]}, + {"name": "server_maintenance", "methods": ["POST"]}, + {"name": "CodeSign", "methods": ["PATCH", "POST"]}, + {"name": "TwilioSMSTest", "methods": ["POST"]}, + {"name": "GetEditActionService", "methods": ["PUT", "POST"]}, + {"name": "TestScript", "methods": ["POST"]}, + {"name": "GetUpdateDeleteAgent", "methods": ["DELETE"]}, + {"name": "Reboot", "methods": ["POST", "PATCH"]}, + {"name": "recover", "methods": ["POST"]}, + {"name": "run_script", "methods": ["POST"]}, + {"name": "bulk", "methods": ["POST"]}, + {"name": "WMI", "methods": ["POST"]}, + {"name": "PolicyAutoTask", "methods": ["POST"]}, + {"name": "RunAutoTask", "methods": ["POST"]}, + {"name": "run_checks", "methods": ["POST"]}, + {"name": "GetSoftware", "methods": ["POST", "PUT"]}, + {"name": "ScanWindowsUpdates", "methods": ["POST"]}, + {"name": "InstallWindowsUpdates", "methods": ["POST"]}, + {"name": "PendingActions", "methods": ["DELETE"]}, + ] + + def __call__(self, request): + return self.get_response(request) + + def drf_mock_response(self, request, resp): + from rest_framework.views import APIView + + view = APIView() + view.headers = view.default_response_headers + return view.finalize_response(request, resp).render() # type: ignore + + def process_view(self, request, view_func, view_args, view_kwargs): + from .utils import notify_error + + err = "Not available in demo" + excludes = ("/api/v3",) + + if request.path.startswith(excludes): + return self.drf_mock_response(request, notify_error(err)) + + for i in self.not_allowed: + if view_func.__name__ == i["name"] and request.method in i["methods"]: + return self.drf_mock_response(request, notify_error(err)) diff --git a/api/tacticalrmm/tacticalrmm/settings.py b/api/tacticalrmm/tacticalrmm/settings.py index 5778d4a38d..04f23f3221 100644 --- a/api/tacticalrmm/tacticalrmm/settings.py +++ b/api/tacticalrmm/tacticalrmm/settings.py @@ -24,16 +24,16 @@ # https://github.com/wh1te909/rmmagent LATEST_AGENT_VER = "1.7.2" -MESH_VER = "0.9.61" +MESH_VER = "0.9.65" -NATS_SERVER_VER = "2.3.3" +NATS_SERVER_VER = "2.6.6" # for the update script, bump when need to recreate venv or npm install PIP_VER = "25" NPM_VER = "27" SETUPTOOLS_VER = "59.6.0" -WHEEL_VER = "0.37.0" +WHEEL_VER = "0.37.1" DL_64 = f"https://github.com/wh1te909/rmmagent/releases/download/v{LATEST_AGENT_VER}/winagent-v{LATEST_AGENT_VER}.exe" DL_32 = f"https://github.com/wh1te909/rmmagent/releases/download/v{LATEST_AGENT_VER}/winagent-v{LATEST_AGENT_VER}-x86.exe" @@ -105,6 +105,8 @@ "scripts", "alerts", "drf_spectacular", + "integrations", + ] if not "AZPIPELINE" in os.environ: @@ -145,6 +147,11 @@ if ADMIN_ENABLED: # type: ignore MIDDLEWARE += ("django.contrib.messages.middleware.MessageMiddleware",) +try: + if DEMO: # type: ignore + MIDDLEWARE += ("tacticalrmm.middleware.DemoMiddleware",) +except: + pass ROOT_URLCONF = "tacticalrmm.urls" diff --git a/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/check_network_loc_aware.ps1 b/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/check_network_loc_aware.ps1 new file mode 100644 index 0000000000..96038cc0e6 --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/check_network_loc_aware.ps1 @@ -0,0 +1,7 @@ +$networkstatus = Get-NetConnectionProfile | Select NetworkCategory | Out-String + +if ($networkstatus.Contains("DomainAuthenticated")) { + exit 0 +} else { + exit 1 +} \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/check_storage_pool_health.ps1 b/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/check_storage_pool_health.ps1 new file mode 100644 index 0000000000..80713e7a73 --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/check_storage_pool_health.ps1 @@ -0,0 +1,15 @@ +$pools = Get-VirtualDisk | select -ExpandProperty HealthStatus + +$err = $False + +ForEach ($pool in $pools) { + if ($pool -ne "Healthy") { + $err = $True + } +} + +if ($err) { + exit 1 +} else { + exit 0 +} \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/clear_print_spool.bat b/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/clear_print_spool.bat new file mode 100644 index 0000000000..eff2008730 --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/clear_print_spool.bat @@ -0,0 +1,9 @@ +@echo off + +sc stop spooler + +timeout /t 5 /nobreak > NUL + +del C:\Windows\System32\spool\printers\* /Q /F /S + +sc start spooler \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/restart_nla.ps1 b/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/restart_nla.ps1 new file mode 100644 index 0000000000..1858ac02a0 --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/restart_nla.ps1 @@ -0,0 +1 @@ +Restart-Service NlaSvc -Force \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/show_temp_dir.py b/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/show_temp_dir.py new file mode 100644 index 0000000000..d52da64550 --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/demo_scripts/show_temp_dir.py @@ -0,0 +1,25 @@ +import os + + +temp_dir = "C:\\Windows\\Temp" +files = [] +total = 0 + +with os.scandir(temp_dir) as it: + for f in it: + file = {} + if not f.name.startswith(".") and f.is_file(): + + total += 1 + stats = f.stat() + + file["name"] = f.name + file["size"] = stats.st_size + file["mtime"] = stats.st_mtime + + files.append(file) + + print(f"Total files: {total}\n") + + for file in files: + print(file) diff --git a/api/tacticalrmm/tacticalrmm/test_data/eventlog_check_fail.json b/api/tacticalrmm/tacticalrmm/test_data/eventlog_check_fail.json new file mode 100644 index 0000000000..69bf386403 --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/eventlog_check_fail.json @@ -0,0 +1,132 @@ +{ + "log": [ + { + "uid": 2006, + "time": "2021-01-13 15:08:05 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket 1573205062969647577, type 5\nEvent Name: StoreAgentSearchUpdatePackagesFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80240024\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: S\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\Temp\\WER7055.tmp.WERInternalMetadata.xml\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportArchive\\NonCritical_Update;ScanForUp_91ddac622de2aa181226f1833763a645a6701e_00000000_a030f5e8-b201-4b3b-b9c9-2f90448b63db\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: a030f5e8-b201-4b3b-b9c9-2f90448b63db\nReport Status: 268435456\nHashed bucket: 2ec09064b27edf5bb5d525ab6926e1d9\nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 2007, + "time": "2021-01-13 15:08:04 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket , type 0\nEvent Name: StoreAgentSearchUpdatePackagesFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80240024\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: S\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportQueue\\NonCritical_Update;ScanForUp_91ddac622de2aa181226f1833763a645a6701e_00000000_a030f5e8-b201-4b3b-b9c9-2f90448b63db\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: a030f5e8-b201-4b3b-b9c9-2f90448b63db\nReport Status: 4\nHashed bucket: \nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 2008, + "time": "2021-01-13 15:08:02 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket 2051817844803413223, type 5\nEvent Name: StoreAgentDownloadFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80246016\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: S\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\Temp\\WER66BF.tmp.WERInternalMetadata.xml\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportArchive\\NonCritical_Update;ScanForUp_2c3439b6a8021ac4ff7a4e7f23e5b6f1d9e0_00000000_4c8d0432-6af0-4a6b-b153-428f6d0310c9\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: 4c8d0432-6af0-4a6b-b153-428f6d0310c9\nReport Status: 268435456\nHashed bucket: 04f95e1eb7585bb17c7985757750a4e7\nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 2009, + "time": "2021-01-13 15:08:02 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket , type 0\nEvent Name: StoreAgentDownloadFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80246016\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: S\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportQueue\\NonCritical_Update;ScanForUp_2c3439b6a8021ac4ff7a4e7f23e5b6f1d9e0_00000000_4c8d0432-6af0-4a6b-b153-428f6d0310c9\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: 4c8d0432-6af0-4a6b-b153-428f6d0310c9\nReport Status: 4\nHashed bucket: \nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 2264, + "time": "2021-01-12 06:28:04 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket 1693358677999346984, type 5\nEvent Name: StoreAgentDownloadFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80246016\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: 2\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\Temp\\WERFEF3.tmp.WERInternalMetadata.xml\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportArchive\\NonCritical_Update;ScanForUp_c7a6adc885884a9aed88424cfb7d9d742f573c1_00000000_32d7534b-30da-4a6f-aa5a-7f65a48d2d47\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: 32d7534b-30da-4a6f-aa5a-7f65a48d2d47\nReport Status: 268435456\nHashed bucket: cdec799a6cf0bbef378004beef79e528\nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 2265, + "time": "2021-01-12 06:28:03 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket , type 0\nEvent Name: StoreAgentDownloadFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80246016\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: 2\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportQueue\\NonCritical_Update;ScanForUp_c7a6adc885884a9aed88424cfb7d9d742f573c1_00000000_32d7534b-30da-4a6f-aa5a-7f65a48d2d47\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: 32d7534b-30da-4a6f-aa5a-7f65a48d2d47\nReport Status: 4\nHashed bucket: \nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 2636, + "time": "2021-01-10 07:13:43 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket 1573205062969647577, type 5\nEvent Name: StoreAgentSearchUpdatePackagesFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80240024\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: S\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\Temp\\WER118F.tmp.WERInternalMetadata.xml\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportArchive\\NonCritical_Update;ScanForUp_91ddac622de2aa181226f1833763a645a6701e_00000000_d75f7cf4-1ba2-4a8f-a4fb-f0336137aeb9\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: d75f7cf4-1ba2-4a8f-a4fb-f0336137aeb9\nReport Status: 268435456\nHashed bucket: 2ec09064b27edf5bb5d525ab6926e1d9\nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 2637, + "time": "2021-01-10 07:13:42 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket , type 0\nEvent Name: StoreAgentSearchUpdatePackagesFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80240024\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: S\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportQueue\\NonCritical_Update;ScanForUp_91ddac622de2aa181226f1833763a645a6701e_00000000_d75f7cf4-1ba2-4a8f-a4fb-f0336137aeb9\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: d75f7cf4-1ba2-4a8f-a4fb-f0336137aeb9\nReport Status: 4\nHashed bucket: \nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 2638, + "time": "2021-01-10 07:13:40 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket 2051817844803413223, type 5\nEvent Name: StoreAgentDownloadFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80246016\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: S\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\Temp\\WER867.tmp.WERInternalMetadata.xml\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportArchive\\NonCritical_Update;ScanForUp_2c3439b6a8021ac4ff7a4e7f23e5b6f1d9e0_00000000_e423f369-52f4-4cf1-98b7-6e519dad9836\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: e423f369-52f4-4cf1-98b7-6e519dad9836\nReport Status: 268435456\nHashed bucket: 04f95e1eb7585bb17c7985757750a4e7\nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 2639, + "time": "2021-01-10 07:13:40 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket , type 0\nEvent Name: StoreAgentDownloadFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80246016\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: S\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportQueue\\NonCritical_Update;ScanForUp_2c3439b6a8021ac4ff7a4e7f23e5b6f1d9e0_00000000_e423f369-52f4-4cf1-98b7-6e519dad9836\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: e423f369-52f4-4cf1-98b7-6e519dad9836\nReport Status: 4\nHashed bucket: \nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 5553, + "time": "2020-12-25 15:45:02 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket 1988976340961221197, type 5\nEvent Name: StoreAgentSearchUpdatePackagesFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80240024\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: G\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\Temp\\WER784D.tmp.WERInternalMetadata.xml\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportArchive\\NonCritical_Update;ScanForUp_2ae3e9964efbef3189977773239bfa7f29278_00000000_a20518d3-26b9-4e16-9223-924bc99df211\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: a20518d3-26b9-4e16-9223-924bc99df211\nReport Status: 268435456\nHashed bucket: d6c816dde23870028b9a4371ada65a4d\nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 5554, + "time": "2020-12-25 15:45:02 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket , type 0\nEvent Name: StoreAgentSearchUpdatePackagesFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80240024\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: G\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportQueue\\NonCritical_Update;ScanForUp_2ae3e9964efbef3189977773239bfa7f29278_00000000_a20518d3-26b9-4e16-9223-924bc99df211\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: a20518d3-26b9-4e16-9223-924bc99df211\nReport Status: 4\nHashed bucket: \nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 5555, + "time": "2020-12-25 15:45:00 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket 1198513334388591380, type 5\nEvent Name: StoreAgentDownloadFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80246016\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: G\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\Temp\\WER6F15.tmp.WERInternalMetadata.xml\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportArchive\\NonCritical_Update;ScanForUp_11349d50384236752c9ebf31943a81bc9c22_00000000_d7901c46-3ff4-4e71-8d09-cb4511c1f790\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: d7901c46-3ff4-4e71-8d09-cb4511c1f790\nReport Status: 268435456\nHashed bucket: ca587589ef5ddc16c0a1f98712cd0b14\nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 5556, + "time": "2020-12-25 15:44:59 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket , type 0\nEvent Name: StoreAgentDownloadFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80246016\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: G\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportQueue\\NonCritical_Update;ScanForUp_11349d50384236752c9ebf31943a81bc9c22_00000000_d7901c46-3ff4-4e71-8d09-cb4511c1f790\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: d7901c46-3ff4-4e71-8d09-cb4511c1f790\nReport Status: 4\nHashed bucket: \nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 7058, + "time": "2020-12-17 10:59:07 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket 1324913600230033009, type 5\nEvent Name: StoreAgentDownloadFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80073cf9\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: 8\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\Temp\\WERD7E0.tmp.WERInternalMetadata.xml\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportArchive\\NonCritical_Update;ScanForUp_f5657215ea2368b3b590dfaee6ea708ec7f61_00000000_979cc6e7-b0ab-42ac-8127-1fec5a11c639\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: 979cc6e7-b0ab-42ac-8127-1fec5a11c639\nReport Status: 268435456\nHashed bucket: 39ea3113ccdc8abbd26309e653cb8671\nCab Guid: 0", + "eventType": "INFO" + }, + { + "uid": 7059, + "time": "2020-12-17 10:59:06 -0800 PST", + "source": "Windows Error Reporting", + "eventID": 1001, + "message": "Fault bucket , type 0\nEvent Name: StoreAgentDownloadFailure1\nResponse: Not available\nCab Id: 0\n\nProblem signature:\nP1: Update;ScanForUpdates\nP2: 80073cf9\nP3: 19041\nP4: 508\nP5: Windows.Desktop\nP6: 8\nP7: \nP8: \nP9: \nP10: \n\nAttached files:\n\nThese files may be available here:\n\\\\?\\C:\\ProgramData\\Microsoft\\Windows\\WER\\ReportQueue\\NonCritical_Update;ScanForUp_f5657215ea2368b3b590dfaee6ea708ec7f61_00000000_979cc6e7-b0ab-42ac-8127-1fec5a11c639\n\nAnalysis symbol: \nRechecking for solution: 0\nReport Id: 979cc6e7-b0ab-42ac-8127-1fec5a11c639\nReport Status: 4\nHashed bucket: \nCab Guid: 0", + "eventType": "INFO" + } + ] +} \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/test_data/procs.json b/api/tacticalrmm/tacticalrmm/test_data/procs.json index 34ae026f4b..0e8fa9f4c5 100644 --- a/api/tacticalrmm/tacticalrmm/test_data/procs.json +++ b/api/tacticalrmm/tacticalrmm/test_data/procs.json @@ -1,1102 +1,850 @@ [ - { - "name": "System", - "cpu_percent": 0.0, - "membytes": 434655234324, - "pid": 4, - "ppid": 0, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 2 - }, { "name": "Registry", - "cpu_percent": 0.0, - "membytes": 0.009720362333912082, - "pid": 280, - "ppid": 4, - "status": "running", + "pid": 368, + "membytes": 110456832, "username": "NT AUTHORITY\\SYSTEM", - "id": 4 + "id": 1, + "cpu_percent": "0.0" }, { "name": "smss.exe", - "cpu_percent": 0.0, - "membytes": 0.0006223099632878874, - "pid": 976, - "ppid": 4, - "status": "running", + "pid": 836, + "membytes": 1302528, "username": "NT AUTHORITY\\SYSTEM", - "id": 5 - }, - { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.005682306310149464, - "pid": 1160, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 6 - }, - { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004793576106987529, - "pid": 1172, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 7 + "id": 2, + "cpu_percent": "0.0" }, { "name": "csrss.exe", - "cpu_percent": 0.0, - "membytes": 0.002459416691971619, - "pid": 1240, - "ppid": 1220, - "status": "running", + "pid": 1804, + "membytes": 5038080, "username": "NT AUTHORITY\\SYSTEM", - "id": 8 + "id": 3, + "cpu_percent": "0.0" }, { "name": "wininit.exe", - "cpu_percent": 0.0, - "membytes": 0.0031970428784885716, - "pid": 1316, - "ppid": 1220, - "status": "running", + "pid": 1920, + "membytes": 6553600, "username": "NT AUTHORITY\\SYSTEM", - "id": 9 - }, - { - "name": "csrss.exe", - "cpu_percent": 0.0, - "membytes": 0.0023719354191771556, - "pid": 1324, - "ppid": 1308, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 10 + "id": 4, + "cpu_percent": "0.0" }, { "name": "services.exe", - "cpu_percent": 0.0, - "membytes": 0.00596662044673147, - "pid": 1388, - "ppid": 1316, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 11 - }, - { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.006052113508780605, - "pid": 1396, - "ppid": 1388, - "status": "running", + "pid": 264, + "membytes": 27267072, "username": "NT AUTHORITY\\SYSTEM", - "id": 12 + "id": 5, + "cpu_percent": "0.3" }, { "name": "LsaIso.exe", - "cpu_percent": 0.0, - "membytes": 0.0016124389144615866, - "pid": 1408, - "ppid": 1316, - "status": "running", + "pid": 256, + "membytes": 3620864, "username": "NT AUTHORITY\\SYSTEM", - "id": 13 + "id": 6, + "cpu_percent": "0.0" }, { "name": "lsass.exe", - "cpu_percent": 0.0, - "membytes": 0.012698702030414497, - "pid": 1416, - "ppid": 1316, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 14 - }, - { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.007129723732748768, - "pid": 1444, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 15 - }, - { - "name": "winlogon.exe", - "cpu_percent": 0.0, - "membytes": 0.005396003962822129, - "pid": 1492, - "ppid": 1308, - "status": "running", + "pid": 292, + "membytes": 49418240, "username": "NT AUTHORITY\\SYSTEM", - "id": 16 + "id": 7, + "cpu_percent": "0.1" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.0027815068327148706, - "pid": 1568, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 17 - }, - { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.001936517265950167, - "pid": 1604, - "ppid": 1388, - "status": "running", + "pid": 1764, + "membytes": 4108288, "username": "NT AUTHORITY\\SYSTEM", - "id": 18 + "id": 8, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.011187661863964672, - "pid": 1628, - "ppid": 1388, - "status": "running", + "pid": 1932, + "membytes": 25579520, "username": "NT AUTHORITY\\SYSTEM", - "id": 19 + "id": 9, + "cpu_percent": "0.0" }, { "name": "fontdrvhost.exe", - "cpu_percent": 0.0, - "membytes": 0.002765601146752241, - "pid": 1652, - "ppid": 1492, - "status": "running", - "username": "Font Driver Host\\UMFD-1", - "id": 20 - }, - { - "name": "fontdrvhost.exe", - "cpu_percent": 0.0, - "membytes": 0.0017794486170691988, - "pid": 1660, - "ppid": 1316, - "status": "running", + "pid": 8, + "membytes": 4362240, "username": "Font Driver Host\\UMFD-0", - "id": 21 + "id": 10, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.006676411682813821, - "pid": 1752, - "ppid": 1388, - "status": "running", + "pid": 2112, + "membytes": 20176896, "username": "NT AUTHORITY\\NETWORK SERVICE", - "id": 22 + "id": 11, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004892986644253965, - "pid": 1796, - "ppid": 1388, - "status": "running", + "pid": 2164, + "membytes": 9703424, "username": "NT AUTHORITY\\SYSTEM", - "id": 23 + "id": 12, + "cpu_percent": "0.0" }, { - "name": "dwm.exe", - "cpu_percent": 0.0, - "membytes": 0.02493216274642207, - "pid": 1868, - "ppid": 1492, - "status": "running", - "username": "Window Manager\\DWM-1", - "id": 24 + "name": "svchost.exe", + "pid": 2352, + "membytes": 14819328, + "username": "NT AUTHORITY\\NETWORK SERVICE", + "id": 13, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.011945170157934911, - "pid": 1972, - "ppid": 1388, - "status": "running", + "pid": 2384, + "membytes": 9363456, "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 25 + "id": 14, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.006616765360453959, - "pid": 1980, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\NETWORK SERVICE", - "id": 26 + "pid": 2392, + "membytes": 8581120, + "username": "NT AUTHORITY\\LOCAL SERVICE", + "id": 15, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.0034435810109093323, - "pid": 2008, - "ppid": 1388, - "status": "running", + "pid": 2400, + "membytes": 12750848, "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 27 + "id": 16, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004722000520155695, - "pid": 2160, - "ppid": 1388, - "status": "running", + "pid": 2516, + "membytes": 12111872, "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 28 + "id": 17, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004264712048730091, - "pid": 2196, - "ppid": 1388, - "status": "running", + "pid": 2524, + "membytes": 10764288, "username": "NT AUTHORITY\\SYSTEM", - "id": 29 + "id": 18, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.005493426289343236, - "pid": 2200, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 30 + "pid": 2536, + "membytes": 15400960, + "username": "NT AUTHORITY\\LOCAL SERVICE", + "id": 19, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.002757648303770926, - "pid": 2212, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 31 + "pid": 2624, + "membytes": 15835136, + "username": "NT AUTHORITY\\NETWORK SERVICE", + "id": 20, + "cpu_percent": "0.1" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.0038113999987951447, - "pid": 2224, - "ppid": 1388, - "status": "running", + "pid": 2632, + "membytes": 5963776, "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 32 + "id": 21, + "cpu_percent": "0.0" }, { - "name": "mmc.exe", - "cpu_percent": 0.084375, - "membytes": 0.027600341566653204, - "pid": 2272, - "ppid": 4664, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 33 + "name": "svchost.exe", + "pid": 2804, + "membytes": 22790144, + "username": "NT AUTHORITY\\LOCAL SERVICE", + "id": 22, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004185183618916942, - "pid": 2312, - "ppid": 1388, - "status": "running", + "pid": 2848, + "membytes": 24428544, "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 34 + "id": 23, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.003334229419916253, - "pid": 2352, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 35 + "pid": 2996, + "membytes": 18673664, + "username": "NT AUTHORITY\\NETWORK SERVICE", + "id": 24, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.003841223159975075, - "pid": 2400, - "ppid": 1388, - "status": "running", + "pid": 3044, + "membytes": 25432064, "username": "NT AUTHORITY\\SYSTEM", - "id": 36 + "id": 25, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.00720527574107126, - "pid": 2440, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 37 + "pid": 2480, + "membytes": 12210176, + "username": "NT AUTHORITY\\LOCAL SERVICE", + "id": 26, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.008088041311997208, - "pid": 2512, - "ppid": 1388, - "status": "running", + "pid": 2840, + "membytes": 7012352, "username": "NT AUTHORITY\\SYSTEM", - "id": 38 + "id": 27, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.005859257066483719, - "pid": 2600, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\NETWORK SERVICE", - "id": 39 + "pid": 2768, + "membytes": 18317312, + "username": "NT AUTHORITY\\SYSTEM", + "id": 28, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004566920082020056, - "pid": 2724, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\NETWORK SERVICE", - "id": 40 + "name": "atiesrxx.exe", + "pid": 1788, + "membytes": 6561792, + "username": "NT AUTHORITY\\SYSTEM", + "id": 29, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004475462387734934, - "pid": 2732, - "ppid": 1388, - "status": "running", + "name": "amdfendrsr.exe", + "pid": 3076, + "membytes": 8232960, + "username": "NT AUTHORITY\\SYSTEM", + "id": 30, + "cpu_percent": "0.0" + }, + { + "name": "WUDFHost.exe", + "pid": 3144, + "membytes": 8294400, "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 41 + "id": 31, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004006244651837358, - "pid": 2748, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\NETWORK SERVICE", - "id": 42 + "pid": 3612, + "membytes": 6955008, + "username": "NT AUTHORITY\\SYSTEM", + "id": 32, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.003240783514885803, - "pid": 2796, - "ppid": 1388, - "status": "running", + "pid": 3640, + "membytes": 14684160, + "username": "NT AUTHORITY\\LOCAL SERVICE", + "id": 33, + "cpu_percent": "0.0" + }, + { + "name": "spaceman.exe", + "pid": 3700, + "membytes": 1089536, "username": "NT AUTHORITY\\SYSTEM", - "id": 43 + "id": 34, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.0036404138746968747, - "pid": 2852, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 44 + "pid": 3824, + "membytes": 18538496, + "username": "NT AUTHORITY\\SYSTEM", + "id": 35, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.005932820864060882, - "pid": 2936, - "ppid": 1388, - "status": "running", + "pid": 3844, + "membytes": 48369664, "username": "NT AUTHORITY\\SYSTEM", - "id": 45 + "id": 36, + "cpu_percent": "0.5" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004240853519786147, - "pid": 2944, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 46 + "pid": 3884, + "membytes": 9940992, + "username": "NT AUTHORITY\\NETWORK SERVICE", + "id": 37, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.009068229209444265, - "pid": 2952, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 47 + "pid": 3920, + "membytes": 14012416, + "username": "NT AUTHORITY\\SYSTEM", + "id": 38, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.008205345745971602, - "pid": 3036, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 48 + "pid": 3936, + "membytes": 9342976, + "username": "NT AUTHORITY\\SYSTEM", + "id": 39, + "cpu_percent": "0.0" }, { - "name": "spaceman.exe", - "cpu_percent": 0.0, - "membytes": 0.0003360076159605526, - "pid": 3112, - "ppid": 2440, - "status": "running", + "name": "svchost.exe", + "pid": 4016, + "membytes": 10964992, "username": "NT AUTHORITY\\SYSTEM", - "id": 49 + "id": 40, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.00409571413537715, - "pid": 3216, - "ppid": 1388, - "status": "running", + "pid": 4180, + "membytes": 8028160, "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 50 + "id": 41, + "cpu_percent": "0.0" }, { - "name": "ShellExperienceHost.exe", - "cpu_percent": 0.0, - "membytes": 0.030085604998314096, - "pid": 3228, - "ppid": 1628, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 51 + "name": "svchost.exe", + "pid": 4352, + "membytes": 7245824, + "username": "NT AUTHORITY\\LOCAL SERVICE", + "id": 42, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004664342408541163, - "pid": 3244, - "ppid": 1388, - "status": "running", + "pid": 4392, + "membytes": 5763072, "username": "NT AUTHORITY\\SYSTEM", - "id": 52 + "id": 43, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004843281375620747, - "pid": 3268, - "ppid": 1388, - "status": "running", + "pid": 4504, + "membytes": 5754880, "username": "NT AUTHORITY\\SYSTEM", - "id": 53 + "id": 44, + "cpu_percent": "0.0" }, { - "name": "python.exe", - "cpu_percent": 0.559375, - "membytes": 0.029455342192044896, - "pid": 3288, - "ppid": 4708, - "status": "running", + "name": "svchost.exe", + "pid": 4512, + "membytes": 8081408, "username": "NT AUTHORITY\\SYSTEM", - "id": 54 + "id": 45, + "cpu_percent": "0.0" }, { - "name": "RuntimeBroker.exe", - "cpu_percent": 0.0, - "membytes": 0.010283025974840107, - "pid": 3296, - "ppid": 1628, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 55 + "name": "svchost.exe", + "pid": 4604, + "membytes": 10006528, + "username": "NT AUTHORITY\\LOCAL SERVICE", + "id": 46, + "cpu_percent": "0.0" }, { - "name": "RuntimeBroker.exe", - "cpu_percent": 0.0, - "membytes": 0.006596883253000673, - "pid": 3308, - "ppid": 1628, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 56 + "name": "svchost.exe", + "pid": 4640, + "membytes": 12521472, + "username": "NT AUTHORITY\\SYSTEM", + "id": 47, + "cpu_percent": "0.0" }, { "name": "spoolsv.exe", - "cpu_percent": 0.0, - "membytes": 0.008095994154978522, - "pid": 3708, - "ppid": 1388, - "status": "running", + "pid": 5036, + "membytes": 17305600, "username": "NT AUTHORITY\\SYSTEM", - "id": 57 + "id": 48, + "cpu_percent": "0.0" }, { - "name": "conhost.exe", - "cpu_percent": 0.0, - "membytes": 0.011507763793962596, - "pid": 3752, - "ppid": 6620, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 58 + "name": "CagService.exe", + "pid": 3216, + "membytes": 161157120, + "username": "NT AUTHORITY\\SYSTEM", + "id": 49, + "cpu_percent": "0.4" }, { - "name": "LogMeInSystray.exe", - "cpu_percent": 0.0, - "membytes": 0.010300919871548067, - "pid": 3780, - "ppid": 4664, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 59 + "name": "svchost.exe", + "pid": 3588, + "membytes": 6782976, + "username": "NT AUTHORITY\\SYSTEM", + "id": 50, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.005767799372198599, - "pid": 3808, - "ppid": 1388, - "status": "running", + "pid": 4228, + "membytes": 71839744, "username": "NT AUTHORITY\\SYSTEM", - "id": 60 + "id": 51, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.007070077410388906, - "pid": 3816, - "ppid": 1388, - "status": "running", + "pid": 4452, + "membytes": 32083968, "username": "NT AUTHORITY\\NETWORK SERVICE", - "id": 61 + "id": 52, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.014217695039845633, - "pid": 3824, - "ppid": 1388, - "status": "running", + "pid": 4804, + "membytes": 5677056, "username": "NT AUTHORITY\\SYSTEM", - "id": 62 + "id": 53, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.022611920806623463, - "pid": 3832, - "ppid": 1388, - "status": "running", + "pid": 5124, + "membytes": 13717504, "username": "NT AUTHORITY\\SYSTEM", - "id": 63 + "id": 54, + "cpu_percent": "0.0" }, { - "name": "nssm.exe", - "cpu_percent": 0.0, - "membytes": 0.003163243295817984, - "pid": 3840, - "ppid": 1388, - "status": "running", + "name": "svchost.exe", + "pid": 5132, + "membytes": 12251136, + "username": "NT AUTHORITY\\NETWORK SERVICE", + "id": 55, + "cpu_percent": "0.0" + }, + { + "name": "DesktopVideoHelper.exe", + "pid": 5140, + "membytes": 8085504, "username": "NT AUTHORITY\\SYSTEM", - "id": 64 + "id": 56, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.0030717856015328626, - "pid": 3856, - "ppid": 1388, - "status": "running", + "name": "vmms.exe", + "pid": 5148, + "membytes": 63819776, "username": "NT AUTHORITY\\SYSTEM", - "id": 65 + "id": 57, + "cpu_percent": "0.3" }, { - "name": "LMIGuardianSvc.exe", - "cpu_percent": 0.0, - "membytes": 0.004441662805064347, - "pid": 3868, - "ppid": 1388, - "status": "running", + "name": "IPROSetMonitor.exe", + "pid": 5156, + "membytes": 10190848, "username": "NT AUTHORITY\\SYSTEM", - "id": 66 + "id": 58, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.0026781198739577773, - "pid": 3876, - "ppid": 1388, - "status": "running", + "name": "tomcat7.exe", + "pid": 5260, + "membytes": 381120512, "username": "NT AUTHORITY\\SYSTEM", - "id": 67 + "id": 59, + "cpu_percent": "0.0" }, { - "name": "ramaint.exe", - "cpu_percent": 0.0, - "membytes": 0.0038471877922110613, - "pid": 3884, - "ppid": 1388, - "status": "running", + "name": "winvnc.exe", + "pid": 5284, + "membytes": 7983104, "username": "NT AUTHORITY\\SYSTEM", - "id": 68 + "id": 60, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.005374133644623514, - "pid": 3892, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\NETWORK SERVICE", - "id": 69 + "name": "mongod.exe", + "pid": 5376, + "membytes": 135512064, + "username": "NT AUTHORITY\\SYSTEM", + "id": 61, + "cpu_percent": "0.4" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.006421920707411746, - "pid": 3900, - "ppid": 1388, - "status": "running", + "pid": 5468, + "membytes": 8581120, "username": "NT AUTHORITY\\SYSTEM", - "id": 70 + "id": 62, + "cpu_percent": "0.0" }, { - "name": "ssm.exe", - "cpu_percent": 0.0, - "membytes": 0.0031612550850726546, - "pid": 3908, - "ppid": 1388, - "status": "running", + "name": "conhost.exe", + "pid": 5516, + "membytes": 13221888, "username": "NT AUTHORITY\\SYSTEM", - "id": 71 + "id": 63, + "cpu_percent": "0.0" }, { - "name": "MeshAgent.exe", - "cpu_percent": 0.0, - "membytes": 0.01894963661372797, - "pid": 3920, - "ppid": 1388, - "status": "running", + "name": "conhost.exe", + "pid": 6444, + "membytes": 14430208, "username": "NT AUTHORITY\\SYSTEM", - "id": 72 + "id": 64, + "cpu_percent": "0.0" + }, + { + "name": "WmiPrvSE.exe", + "pid": 7160, + "membytes": 37707776, + "username": "NT AUTHORITY\\NETWORK SERVICE", + "id": 65, + "cpu_percent": "0.9" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.006905055918526623, - "pid": 4076, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\LOCAL SERVICE", - "id": 73 + "pid": 7648, + "membytes": 10403840, + "username": "NT AUTHORITY\\SYSTEM", + "id": 66, + "cpu_percent": "0.4" }, { - "name": "sihost.exe", - "cpu_percent": 0.0, - "membytes": 0.012527715906316225, - "pid": 4136, - "ppid": 3268, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 74 + "name": "vmcompute.exe", + "pid": 7988, + "membytes": 14204928, + "username": "NT AUTHORITY\\SYSTEM", + "id": 67, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.004169277932954313, - "pid": 4160, - "ppid": 1388, - "status": "running", + "pid": 3776, + "membytes": 9170944, "username": "NT AUTHORITY\\SYSTEM", - "id": 75 + "id": 68, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.006851374228402747, - "pid": 4192, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\NETWORK SERVICE", - "id": 76 + "name": "vmwp.exe", + "pid": 8260, + "membytes": 35860480, + "username": "NT VIRTUAL MACHINE\\F7F40AEE-CE4B-4F3B-AEF1-96224F686899", + "id": 69, + "cpu_percent": "0.0" + }, + { + "name": "vmwp.exe", + "pid": 8748, + "membytes": 35844096, + "username": "NT VIRTUAL MACHINE\\E5A6878B-20B8-4D85-90CF-5AF97BF260FD", + "id": 70, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.006024278558346003, - "pid": 4208, - "ppid": 1388, - "status": "running", + "pid": 3632, + "membytes": 27947008, "username": "NT AUTHORITY\\SYSTEM", - "id": 77 + "id": 71, + "cpu_percent": "0.0" }, { - "name": "LogMeIn.exe", - "cpu_percent": 0.0, - "membytes": 0.017691099211934895, - "pid": 4232, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 78 + "name": "vmwp.exe", + "pid": 2348, + "membytes": 35233792, + "username": "NT VIRTUAL MACHINE\\B0FFC451-6B1D-40D4-AD8C-63918DCD894A", + "id": 72, + "cpu_percent": "0.0" }, { - "name": "vmms.exe", - "cpu_percent": 0.0, - "membytes": 0.017331233067030397, - "pid": 4292, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 79 + "name": "vmwp.exe", + "pid": 2844, + "membytes": 37187584, + "username": "NT VIRTUAL MACHINE\\E937A2B4-63F8-4D36-B1F8-4A7806022B26", + "id": 73, + "cpu_percent": "0.0" }, { - "name": "TabTip32.exe", - "cpu_percent": 0.0, - "membytes": 0.0023441004687425535, - "pid": 4304, - "ppid": 5916, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 80 + "name": "svchost.exe", + "pid": 5444, + "membytes": 14479360, + "username": "NT AUTHORITY\\LOCAL SERVICE", + "id": 74, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.022273924979917578, - "pid": 4436, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 81 + "pid": 9088, + "membytes": 30052352, + "username": "NT AUTHORITY\\LOCAL SERVICE", + "id": 75, + "cpu_percent": "0.1" }, { - "name": "explorer.exe", - "cpu_percent": 0.0, - "membytes": 0.040491900039364585, - "pid": 4664, - "ppid": 2804, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 82 + "name": "svchost.exe", + "pid": 5592, + "membytes": 6184960, + "username": "NT AUTHORITY\\LOCAL SERVICE", + "id": 76, + "cpu_percent": "0.0" }, { - "name": "tacticalrmm.exe", - "cpu_percent": 0.0, - "membytes": 0.019854272502852533, - "pid": 4696, - "ppid": 3840, - "status": "running", + "name": "svchost.exe", + "pid": 2072, + "membytes": 10117120, "username": "NT AUTHORITY\\SYSTEM", - "id": 83 + "id": 77, + "cpu_percent": "0.0" }, { - "name": "python.exe", - "cpu_percent": 0.0, - "membytes": 0.03651547854870715, - "pid": 4708, - "ppid": 3908, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 84 + "name": "msdtc.exe", + "pid": 8200, + "membytes": 10334208, + "username": "NT AUTHORITY\\NETWORK SERVICE", + "id": 78, + "cpu_percent": "0.0" }, { - "name": "conhost.exe", - "cpu_percent": 0.0, - "membytes": 0.0060938659344325075, - "pid": 4728, - "ppid": 4708, - "status": "running", + "name": "svchost.exe", + "pid": 5184, + "membytes": 19677184, "username": "NT AUTHORITY\\SYSTEM", - "id": 85 + "id": 79, + "cpu_percent": "0.0" }, { - "name": "conhost.exe", - "cpu_percent": 0.0, - "membytes": 0.006127665517103096, - "pid": 4736, - "ppid": 4696, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 86 + "name": "vmwp.exe", + "pid": 5188, + "membytes": 34082816, + "username": "NT VIRTUAL MACHINE\\99C21B25-4F9C-4DEF-9C2E-866E6C963460", + "id": 80, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.0035111801762505086, - "pid": 4752, - "ppid": 1388, - "status": "running", + "name": "vmwp.exe", + "pid": 2684, + "membytes": 36429824, + "username": "NT VIRTUAL MACHINE\\2085B1D9-DFB8-482E-9454-39152BC9AA16", + "id": 81, + "cpu_percent": "0.1" + }, + { + "name": "SecurityHealthService.exe", + "pid": 8440, + "membytes": 11591680, "username": "NT AUTHORITY\\SYSTEM", - "id": 87 + "id": 82, + "cpu_percent": "0.0" }, { - "name": "vmcompute.exe", - "cpu_percent": 0.0, - "membytes": 0.005598801458845658, - "pid": 5020, - "ppid": 1388, - "status": "running", + "name": "svchost.exe", + "pid": 3816, + "membytes": 12738560, "username": "NT AUTHORITY\\SYSTEM", - "id": 88 + "id": 83, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.005260805632139777, - "pid": 5088, - "ppid": 1388, - "status": "running", + "pid": 8700, + "membytes": 13672448, "username": "NT AUTHORITY\\SYSTEM", - "id": 89 + "id": 84, + "cpu_percent": "0.0" }, { - "name": "vmwp.exe", - "cpu_percent": 0.0, - "membytes": 0.011384494727752215, - "pid": 5276, - "ppid": 5020, - "status": "running", - "username": "NT VIRTUAL MACHINE\\A501B6E4-9443-49AA-99BD-E52CCF508915", - "id": 90 + "name": "AEMAgent.exe", + "pid": 9036, + "membytes": 189452288, + "username": "NT AUTHORITY\\SYSTEM", + "id": 85, + "cpu_percent": "0.4" }, { - "name": "python.exe", - "cpu_percent": 0.0, - "membytes": 0.020685344594399937, - "pid": 5472, - "ppid": 4708, - "status": "running", + "name": "aria2c.exe", + "pid": 6788, + "membytes": 9117696, "username": "NT AUTHORITY\\SYSTEM", - "id": 91 + "id": 86, + "cpu_percent": "0.0" }, { - "name": "WmiPrvSE.exe", - "cpu_percent": 0.0, - "membytes": 0.010167709751611041, - "pid": 5712, - "ppid": 1628, - "status": "running", - "username": "NT AUTHORITY\\NETWORK SERVICE", - "id": 92 + "name": "RMM.WebRemote.exe", + "pid": 5368, + "membytes": 62095360, + "username": "NT AUTHORITY\\SYSTEM", + "id": 87, + "cpu_percent": "0.0" }, { - "name": "TabTip.exe", - "cpu_percent": 0.0, - "membytes": 0.008543341572677483, - "pid": 5916, - "ppid": 4752, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 93 + "name": "MsMpEng.exe", + "pid": 576, + "membytes": 238776320, + "username": "NT AUTHORITY\\SYSTEM", + "id": 88, + "cpu_percent": "0.3" }, { - "name": "vmwp.exe", - "cpu_percent": 0.0, - "membytes": 0.011780148666072628, - "pid": 5924, - "ppid": 5020, - "status": "running", - "username": "NT VIRTUAL MACHINE\\0C89E8DE-7E85-4955-832E-36F786714D55", - "id": 94 + "name": "WmiPrvSE.exe", + "pid": 7656, + "membytes": 13287424, + "username": "NT AUTHORITY\\LOCAL SERVICE", + "id": 89, + "cpu_percent": "0.1" }, { - "name": "msdtc.exe", - "cpu_percent": 0.0, - "membytes": 0.004956609388104484, - "pid": 6016, - "ppid": 1388, - "status": "running", - "username": "NT AUTHORITY\\NETWORK SERVICE", - "id": 95 + "name": "svchost.exe", + "pid": 10056, + "membytes": 12800000, + "username": "NT AUTHORITY\\SYSTEM", + "id": 90, + "cpu_percent": "0.0" }, { "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.0025468979647660824, - "pid": 6056, - "ppid": 1388, - "status": "running", + "pid": 9400, + "membytes": 7532544, "username": "NT AUTHORITY\\SYSTEM", - "id": 96 + "id": 91, + "cpu_percent": "0.0" }, { - "name": "vmwp.exe", - "cpu_percent": 0.06875, - "membytes": 0.01141034146744149, - "pid": 6092, - "ppid": 5020, - "status": "running", - "username": "NT VIRTUAL MACHINE\\21F47B3B-DD44-40D4-8E12-FAC50D80B841", - "id": 97 + "name": "svchost.exe", + "pid": 11368, + "membytes": 7905280, + "username": "NT AUTHORITY\\SYSTEM", + "id": 92, + "cpu_percent": "0.0" }, { - "name": "vmwp.exe", - "cpu_percent": 0.0, - "membytes": 0.011595245066757059, - "pid": 6296, - "ppid": 5020, - "status": "running", - "username": "NT VIRTUAL MACHINE\\6F192157-71F5-4F33-AEAF-F1CB4478EDFD", - "id": 98 - }, - { - "name": "cmd.exe", - "cpu_percent": 0.0, - "membytes": 0.00203990422470726, - "pid": 6620, - "ppid": 4664, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 99 - }, - { - "name": "ctfmon.exe", - "cpu_percent": 0.0, - "membytes": 0.007632741051316932, - "pid": 6648, - "ppid": 4752, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 100 + "name": "MeshAgent.exe", + "pid": 8484, + "membytes": 39383040, + "username": "NT AUTHORITY\\SYSTEM", + "id": 93, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.007199311108835272, - "pid": 6716, - "ppid": 1388, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 101 + "name": "nssm.exe", + "pid": 7392, + "membytes": 6860800, + "username": "NT AUTHORITY\\SYSTEM", + "id": 94, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.0038054353665591583, - "pid": 6760, - "ppid": 1388, - "status": "running", + "name": "tacticalrmm.exe", + "pid": 7176, + "membytes": 24236032, "username": "NT AUTHORITY\\SYSTEM", - "id": 102 + "id": 95, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.013456210324384736, - "pid": 6868, - "ppid": 1388, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 103 + "name": "conhost.exe", + "pid": 2232, + "membytes": 13496320, + "username": "NT AUTHORITY\\SYSTEM", + "id": 96, + "cpu_percent": "0.0" }, { - "name": "SearchUI.exe", - "cpu_percent": 0.0, - "membytes": 0.04596743243199986, - "pid": 6904, - "ppid": 1628, - "status": "stopped", - "username": "VMHOST4\\Administrator", - "id": 104 + "name": "nssm.exe", + "pid": 10752, + "membytes": 6860800, + "username": "NT AUTHORITY\\SYSTEM", + "id": 97, + "cpu_percent": "0.0" }, { "name": "tacticalrmm.exe", - "cpu_percent": 0.0, - "membytes": 0.023025468641651836, - "pid": 6908, - "ppid": 7592, - "status": "running", + "pid": 4100, + "membytes": 29609984, "username": "NT AUTHORITY\\SYSTEM", - "id": 105 + "id": 98, + "cpu_percent": "0.8" }, { - "name": "taskhostw.exe", - "cpu_percent": 0.0, - "membytes": 0.006147547624556384, - "pid": 6984, - "ppid": 2440, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 106 + "name": "conhost.exe", + "pid": 6260, + "membytes": 13504512, + "username": "NT AUTHORITY\\SYSTEM", + "id": 99, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.017520113087836627, - "pid": 7092, - "ppid": 1388, - "status": "running", + "name": "csrss.exe", + "pid": 2316, + "membytes": 5185536, "username": "NT AUTHORITY\\SYSTEM", - "id": 107 + "id": 100, + "cpu_percent": "0.0" }, { - "name": "RuntimeBroker.exe", - "cpu_percent": 0.0, - "membytes": 0.011543551587378511, - "pid": 7148, - "ppid": 1628, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 108 + "name": "winlogon.exe", + "pid": 11396, + "membytes": 8990720, + "username": "NT AUTHORITY\\SYSTEM", + "id": 101, + "cpu_percent": "0.0" }, { - "name": "dllhost.exe", - "cpu_percent": 0.0, - "membytes": 0.006175382574990985, - "pid": 7232, - "ppid": 1628, - "status": "running", - "username": "VMHOST4\\Administrator", - "id": 109 + "name": "LogonUI.exe", + "pid": 2512, + "membytes": 46878720, + "username": "NT AUTHORITY\\SYSTEM", + "id": 102, + "cpu_percent": "0.0" }, { - "name": "conhost.exe", - "cpu_percent": 0.0, - "membytes": 0.006191288260953614, - "pid": 7288, - "ppid": 6908, - "status": "running", - "username": "NT AUTHORITY\\SYSTEM", - "id": 110 + "name": "fontdrvhost.exe", + "pid": 10616, + "membytes": 4440064, + "username": "Font Driver Host\\UMFD-2", + "id": 103, + "cpu_percent": "0.0" }, { - "name": "nssm.exe", - "cpu_percent": 0.0, - "membytes": 0.003252712779357776, - "pid": 7592, - "ppid": 1388, - "status": "running", + "name": "dwm.exe", + "pid": 9220, + "membytes": 48586752, + "username": "Window Manager\\DWM-2", + "id": 104, + "cpu_percent": "0.0" + }, + { + "name": "atieclxx.exe", + "pid": 8624, + "membytes": 11436032, "username": "NT AUTHORITY\\SYSTEM", - "id": 111 + "id": 105, + "cpu_percent": "0.0" }, { - "name": "svchost.exe", - "cpu_percent": 0.0, - "membytes": 0.005972585078967456, - "pid": 8012, - "ppid": 1388, - "status": "running", + "name": "winvnc.exe", + "pid": 11888, + "membytes": 10010624, "username": "NT AUTHORITY\\SYSTEM", - "id": 112 + "id": 106, + "cpu_percent": "0.0" } ] \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/test_data/software2.json b/api/tacticalrmm/tacticalrmm/test_data/software2.json new file mode 100644 index 0000000000..ce088fbd3f --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/software2.json @@ -0,0 +1,138 @@ +[ + { + "name": "7-Zip 19.00 (x64)", + "version": "19.00" + }, + { + "name": "Mesh Agent background service", + "version": "Not Found" + }, + { + "name": "MeshCentral Agent - Remote Control Software", + "version": "1.0.0" + }, + { + "name": "Microsoft Visual Studio 2010 Tools for Office Runtime (x64)", + "version": "10.0.50903,10.0.50908" + }, + { + "name": "Microsoft 365 Apps for enterprise - en-us", + "version": "16.0.13001.20266" + }, + { + "name": "Microsoft Visual C++ 2013 x64 Additional Runtime - 12.0.40664", + "version": "12.0.40664" + }, + { + "name": "Microsoft Visual C++ 2010 x64 Redistributable - 10.0.40219", + "version": "10.0.40219" + }, + { + "name": "Microsoft Visual C++ 2017 x64 Minimum Runtime - 14.13.26020", + "version": "14.13.26020" + }, + { + "name": "{4CEC2908-5CE4-48F0-A717-8FC833D8017A}", + "version": "0.1.247" + }, + { + "name": "Microsoft Visual C++ 2013 x64 Minimum Runtime - 12.0.40664", + "version": "12.0.40664" + }, + { + "name": "Google Chrome", + "version": "83.0.4103.116" + }, + { + "name": "Office 16 Click-to-Run Licensing Component", + "version": "16.0.13001.20266" + }, + { + "name": "Office 16 Click-to-Run Extensibility Component", + "version": "16.0.13001.20144" + }, + { + "name": "Office 16 Click-to-Run Localization Component", + "version": "16.0.13001.20144" + }, + { + "name": "Microsoft Visual C++ 2017 x64 Additional Runtime - 14.13.26020", + "version": "14.13.26020" + }, + { + "name": "Trend Micro Security Agent", + "version": "6.7.1364" + }, + { + "name": "Salt Minion 1.0.3 (Python 3)", + "version": "1.0.3" + }, + { + "name": "Microsoft Visual C++ 2013 Redistributable (x64) - 12.0.40664", + "version": "12.0.40664.0" + }, + { + "name": "Tactical RMM Agent", + "version": "0.9.4" + }, + { + "name": "LogMeIn Client", + "version": "1.3.4952" + }, + { + "name": "Microsoft Visual C++ 2017 Redistributable (x86) - 14.13.26020", + "version": "14.13.26020.0" + }, + { + "name": "Google Update Helper", + "version": "1.3.35.451" + }, + { + "name": "Teams Machine-Wide Installer", + "version": "1.3.0.4461" + }, + { + "name": "LogMeIn", + "version": "4.1.13508" + }, + { + "name": "Microsoft Visual C++ 2017 Redistributable (x64) - 14.13.26020", + "version": "14.13.26020.0" + }, + { + "name": "Microsoft Visual C++ 2017 x86 Additional Runtime - 14.13.26020", + "version": "14.13.26020" + }, + { + "name": "Microsoft Visual C++ 2017 x86 Minimum Runtime - 14.13.26020", + "version": "14.13.26020" + }, + { + "name": "Printer Installer Client", + "version": "25.0.0.266" + }, + { + "name": "Adobe Acrobat X Pro - English, Fran\u00e7ais, Deutsch", + "version": "10.1.1" + }, + { + "name": "Microsoft Visual C++ 2010 x86 Redistributable - 10.0.40219", + "version": "10.0.40219" + }, + { + "name": "Intel(R) Processor Graphics", + "version": "20.19.15.4835" + }, + { + "name": "Realtek High Definition Audio Driver", + "version": "6.0.1.7548" + }, + { + "name": "Microsoft OneDrive", + "version": "20.114.0607.0002" + }, + { + "name": "Microsoft Teams", + "version": "1.3.00.13565" + } +] \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/test_data/winsvcs.json b/api/tacticalrmm/tacticalrmm/test_data/winsvcs.json new file mode 100644 index 0000000000..5154db9a9b --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/winsvcs.json @@ -0,0 +1,2444 @@ +[ + { + "pid": 4340, + "name": "AdobeARMservice", + "status": "running", + "binpath": "\"C:\\Program Files (x86)\\Common Files\\Adobe\\ARM\\1.0\\armsvc.exe\"", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Adobe Acrobat Updater keeps your Adobe software up to date.", + "display_name": "Adobe Acrobat Update Service" + }, + { + "pid": 0, + "name": "AJRouter", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Routes AllJoyn messages for the local AllJoyn clients. If this service is stopped the AllJoyn clients that do not have their own bundled routers will be unable to run.", + "display_name": "AllJoyn Router Service" + }, + { + "pid": 0, + "name": "ALG", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\alg.exe", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Provides support for 3rd party protocol plug-ins for Internet Connection Sharing", + "display_name": "Application Layer Gateway Service" + }, + { + "pid": 0, + "name": "AppIDSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Determines and verifies the identity of an application. Disabling this service will prevent AppLocker from being enforced.", + "display_name": "Application Identity" + }, + { + "pid": 0, + "name": "Appinfo", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Facilitates the running of interactive applications with additional administrative privileges. If this service is stopped, users will be unable to launch applications with the additional administrative privileges they may require to perform desired user tasks.", + "display_name": "Application Information" + }, + { + "pid": 0, + "name": "AppMgmt", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Processes installation, removal, and enumeration requests for software deployed through Group Policy. If the service is disabled, users will be unable to install, remove, or enumerate software deployed through Group Policy. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Application Management" + }, + { + "pid": 0, + "name": "AppReadiness", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k AppReadiness -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Gets apps ready for use the first time a user signs in to this PC and when adding new apps.", + "display_name": "App Readiness" + }, + { + "pid": 0, + "name": "AppVClient", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\AppVClient.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Disabled", + "description": "Manages App-V users and virtual applications", + "display_name": "Microsoft App-V Client" + }, + { + "pid": 0, + "name": "AppXSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k wsappx -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides infrastructure support for deploying Store applications. This service is started on demand and if disabled Store applications will not be deployed to the system, and may not function properly.", + "display_name": "AppX Deployment Service (AppXSVC)" + }, + { + "pid": 0, + "name": "AssignedAccessManagerSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k AssignedAccessManagerSvc", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "AssignedAccessManager Service supports kiosk experience in Windows.", + "display_name": "AssignedAccessManager Service" + }, + { + "pid": 3148, + "name": "AudioEndpointBuilder", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Manages audio devices for the Windows Audio service. If this service is stopped, audio devices and effects will not function properly. If this service is disabled, any services that explicitly depend on it will fail to start", + "display_name": "Windows Audio Endpoint Builder" + }, + { + "pid": 3640, + "name": "Audiosrv", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Automatic", + "description": "Manages audio for Windows-based programs. If this service is stopped, audio devices and effects will not function properly. If this service is disabled, any services that explicitly depend on it will fail to start", + "display_name": "Windows Audio" + }, + { + "pid": 0, + "name": "autotimesvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k autoTimeSvc", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "This service sets time based on NITZ messages from a Mobile Network", + "display_name": "Cellular Time" + }, + { + "pid": 0, + "name": "AxInstSV", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k AxInstSVGroup", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides User Account Control validation for the installation of ActiveX controls from the Internet and enables management of ActiveX control installation based on Group Policy settings. This service is started on demand and if disabled the installation of ActiveX controls will behave according to default browser settings.", + "display_name": "ActiveX Installer (AxInstSV)" + }, + { + "pid": 0, + "name": "BITS", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": true, + "start_type": "Manual", + "description": "Transfers files in the background using idle network bandwidth. If the service is disabled, then any applications that depend on BITS, such as Windows Update or MSN Explorer, will be unable to automatically download programs and other information.", + "display_name": "Background Intelligent Transfer Service" + }, + { + "pid": 1484, + "name": "BTAGService", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceNetworkRestricted", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Service supporting the audio gateway role of the Bluetooth Handsfree Profile.", + "display_name": "Bluetooth Audio Gateway Service" + }, + { + "pid": 1500, + "name": "BthAvctpSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "This is Audio Video Control Transport Protocol service", + "display_name": "AVCTP service" + }, + { + "pid": 1492, + "name": "bthserv", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "The Bluetooth service supports discovery and association of remote Bluetooth devices. Stopping or disabling this service may cause already installed Bluetooth devices to fail to operate properly and prevent new devices from being discovered or associated.", + "display_name": "Bluetooth Support Service" + }, + { + "pid": 0, + "name": "camsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k appmodel -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides facilities for managing UWP apps access to app capabilities as well as checking an app's access to specific app capabilities", + "display_name": "Capability Access Manager Service" + }, + { + "pid": 2724, + "name": "CDPSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": true, + "start_type": "Automatic", + "description": "This service is used for Connected Devices Platform scenarios", + "display_name": "Connected Devices Platform Service" + }, + { + "pid": 3004, + "name": "CertPropSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Copies user certificates and root certificates from smart cards into the current user's certificate store, detects when a smart card is inserted into a smart card reader, and, if needed, installs the smart card Plug and Play minidriver.", + "display_name": "Certificate Propagation" + }, + { + "pid": 0, + "name": "ClipSVC", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k wsappx -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides infrastructure support for the Microsoft Store. This service is started on demand and if disabled applications bought using Windows Store will not behave correctly.", + "display_name": "Client License Service (ClipSVC)" + }, + { + "pid": 0, + "name": "COMSysApp", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\dllhost.exe /Processid:{02D4B3F1-FD88-11D1-960D-00805FC79235}", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Manages the configuration and tracking of Component Object Model (COM)+-based components. If the service is stopped, most COM+-based components will not function properly. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "COM+ System Application" + }, + { + "pid": 4912, + "name": "cphs", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\DriverStore\\FileRepository\\iigd_dch.inf_amd64_38bfcb542ef4272e\\IntelCpHeciSvc.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Intel(R) Content Protection HECI Service - enables communication with the Content Protection FW", + "display_name": "Intel(R) Content Protection HECI Service" + }, + { + "pid": 4332, + "name": "cplspcon", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\DriverStore\\FileRepository\\iigd_dch.inf_amd64_38bfcb542ef4272e\\IntelCpHDCPSvc.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Intel(R) Content Protection HDCP Service - enables communication with Content Protection HDCP HW", + "display_name": "Intel(R) Content Protection HDCP Service" + }, + { + "pid": 4280, + "name": "CryptSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k NetworkService -p", + "username": "NT Authority\\NetworkService", + "autodelay": false, + "start_type": "Automatic", + "description": "Provides three management services: Catalog Database Service, which confirms the signatures of Windows files and allows new programs to be installed; Protected Root Service, which adds and removes Trusted Root Certification Authority certificates from this computer; and Automatic Root Certificate Update Service, which retrieves root certificates from Windows Update and enable scenarios such as SSL. If this service is stopped, these management services will not function properly. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Cryptographic Services" + }, + { + "pid": 2616, + "name": "CscService", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "The Offline Files service performs maintenance activities on the Offline Files cache, responds to user logon and logoff events, implements the internals of the public API, and dispatches interesting events to those interested in Offline Files activities and changes in cache state.", + "display_name": "Offline Files" + }, + { + "pid": 0, + "name": "defragsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k defragsvc", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Helps the computer run more efficiently by optimizing files on storage drives.", + "display_name": "Optimize drives" + }, + { + "pid": 2860, + "name": "DeviceAssociationService", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables pairing between the system and wired or wireless devices.", + "display_name": "Device Association Service" + }, + { + "pid": 0, + "name": "DeviceInstall", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k DcomLaunch -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables a computer to recognize and adapt to hardware changes with little or no user input. Stopping or disabling this service will result in system instability.", + "display_name": "Device Install Service" + }, + { + "pid": 0, + "name": "DevQueryBroker", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables apps to discover devices with a backgroud task", + "display_name": "DevQuery Background Discovery Broker" + }, + { + "pid": 1684, + "name": "Dhcp", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Automatic", + "description": "Registers and updates IP addresses and DNS records for this computer. If this service is stopped, this computer will not receive dynamic IP addresses and DNS updates. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "DHCP Client" + }, + { + "pid": 0, + "name": "diagnosticshub.standardcollector.service", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\DiagSvcs\\DiagnosticsHub.StandardCollector.Service.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Diagnostics Hub Standard Collector Service. When running, this service collects real time ETW events and processes them.", + "display_name": "Microsoft (R) Diagnostics Hub Standard Collector Service" + }, + { + "pid": 0, + "name": "diagsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k diagnostics", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Executes diagnostic actions for troubleshooting support", + "display_name": "Diagnostic Execution Service" + }, + { + "pid": 4288, + "name": "DiagTrack", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k utcsvc -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "The Connected User Experiences and Telemetry service enables features that support in-application and connected user experiences. Additionally, this service manages the event driven collection and transmission of diagnostic and usage information (used to improve the experience and quality of the Windows Platform) when the diagnostics and usage privacy option settings are enabled under Feedback and Diagnostics.", + "display_name": "Connected User Experiences and Telemetry" + }, + { + "pid": 3132, + "name": "DispBrokerDesktopSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": true, + "start_type": "Automatic", + "description": "Manages the connection and configuration of local and remote displays", + "display_name": "Display Policy Service" + }, + { + "pid": 1848, + "name": "DisplayEnhancementService", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "A service for managing display enhancement such as brightness control.", + "display_name": "Display Enhancement Service" + }, + { + "pid": 0, + "name": "DmEnrollmentSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Performs Device Enrollment Activities for Device Management", + "display_name": "Device Management Enrollment Service" + }, + { + "pid": 0, + "name": "dmwappushservice", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": true, + "start_type": "Manual", + "description": "Routes Wireless Application Protocol (WAP) Push messages received by the device and synchronizes Device Management sessions", + "display_name": "Device Management Wireless Application Protocol (WAP) Push message Routing Service" + }, + { + "pid": 7640, + "name": "DoSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k NetworkService -p", + "username": "NT Authority\\NetworkService", + "autodelay": true, + "start_type": "Automatic", + "description": "Performs content delivery optimization tasks", + "display_name": "Delivery Optimization" + }, + { + "pid": 0, + "name": "dot3svc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "The Wired AutoConfig (DOT3SVC) service is responsible for performing IEEE 802.1X authentication on Ethernet interfaces. If your current wired network deployment enforces 802.1X authentication, the DOT3SVC service should be configured to run for establishing Layer 2 connectivity and/or providing access to network resources. Wired networks that do not enforce 802.1X authentication are unaffected by the DOT3SVC service.", + "display_name": "Wired AutoConfig" + }, + { + "pid": 4320, + "name": "DPS", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServiceNoNetwork -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Automatic", + "description": "The Diagnostic Policy Service enables problem detection, troubleshooting and resolution for Windows components. If this service is stopped, diagnostics will no longer function.", + "display_name": "Diagnostic Policy Service" + }, + { + "pid": 25736, + "name": "DsmSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables the detection, download and installation of device-related software. If this service is disabled, devices may be configured with outdated software, and may not work correctly.", + "display_name": "Device Setup Manager" + }, + { + "pid": 2744, + "name": "DsSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides data brokering between applications.", + "display_name": "Data Sharing Service" + }, + { + "pid": 3836, + "name": "DusmSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Automatic", + "description": "Network data usage, data limit, restrict background data, metered networks.", + "display_name": "Data Usage" + }, + { + "pid": 0, + "name": "Eaphost", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "The Extensible Authentication Protocol (EAP) service provides network authentication in such scenarios as 802.1x wired and wireless, VPN, and Network Access Protection (NAP). EAP also provides application programming interfaces (APIs) that are used by network access clients, including wireless and VPN clients, during the authentication process. If you disable this service, this computer is prevented from accessing networks that require EAP authentication.", + "display_name": "Extensible Authentication Protocol" + }, + { + "pid": 0, + "name": "EFS", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\lsass.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides the core file encryption technology used to store encrypted files on NTFS file system volumes. If this service is stopped or disabled, applications will be unable to access encrypted files.", + "display_name": "Encrypting File System (EFS)" + }, + { + "pid": 0, + "name": "embeddedmode", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "The Embedded Mode service enables scenarios related to Background Applications. Disabling this service will prevent Background Applications from being activated.", + "display_name": "Embedded Mode" + }, + { + "pid": 0, + "name": "EntAppSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k appmodel -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables enterprise application management.", + "display_name": "Enterprise App Management Service" + }, + { + "pid": 1252, + "name": "EventLog", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Automatic", + "description": "This service manages events and event logs. It supports logging events, querying events, subscribing to events, archiving event logs, and managing event metadata. It can display events in both XML and plain text format. Stopping this service may compromise security and reliability of the system.", + "display_name": "Windows Event Log" + }, + { + "pid": 2644, + "name": "EventSystem", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Automatic", + "description": "Supports System Event Notification Service (SENS), which provides automatic distribution of events to subscribing Component Object Model (COM) components. If the service is stopped, SENS will close and will not be able to provide logon and logoff notifications. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "COM+ Event System" + }, + { + "pid": 0, + "name": "Fax", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\fxssvc.exe", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": false, + "start_type": "Manual", + "description": "Enables you to send and receive faxes, utilizing fax resources available on this computer or on the network.", + "display_name": "Fax" + }, + { + "pid": 0, + "name": "fdPHost", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "The FDPHOST service hosts the Function Discovery (FD) network discovery providers. These FD providers supply network discovery services for the Simple Services Discovery Protocol (SSDP) and Web Services – Discovery (WS-D) protocol. Stopping or disabling the FDPHOST service will disable network discovery for these protocols when using FD. When this service is unavailable, network services using FD and relying on these discovery protocols will be unable to find network devices or resources.", + "display_name": "Function Discovery Provider Host" + }, + { + "pid": 0, + "name": "FDResPub", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceAndNoImpersonation -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Publishes this computer and resources attached to this computer so they can be discovered over the network. If this service is stopped, network resources will no longer be published and they will not be discovered by other computers on the network.", + "display_name": "Function Discovery Resource Publication" + }, + { + "pid": 0, + "name": "fhsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Protects user files from accidental loss by copying them to a backup location", + "display_name": "File History Service" + }, + { + "pid": 3156, + "name": "FontCache", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Automatic", + "description": "Optimizes performance of applications by caching commonly used font data. Applications will start this service if it is not already running. It can be disabled, though doing so will degrade application performance.", + "display_name": "Windows Font Cache Service" + }, + { + "pid": 0, + "name": "FrameServer", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k Camera", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables multiple clients to access video frames from camera devices.", + "display_name": "Windows Camera Frame Server" + }, + { + "pid": 0, + "name": "GoogleChromeElevationService", + "status": "stopped", + "binpath": "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\87.0.4280.141\\elevation_service.exe\"", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "", + "display_name": "Google Chrome Elevation Service" + }, + { + "pid": 0, + "name": "gpsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "The service is responsible for applying settings configured by administrators for the computer and users through the Group Policy component. If the service is disabled, the settings will not be applied and applications and components will not be manageable through Group Policy. Any components or applications that depend on the Group Policy component might not be functional if the service is disabled.", + "display_name": "Group Policy Client" + }, + { + "pid": 0, + "name": "GraphicsPerfSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k GraphicsPerfSvcGroup", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Graphics performance monitor service", + "display_name": "GraphicsPerfSvc" + }, + { + "pid": 0, + "name": "gupdate", + "status": "stopped", + "binpath": "\"C:\\Program Files (x86)\\Google\\Update\\GoogleUpdate.exe\" /svc", + "username": "LocalSystem", + "autodelay": true, + "start_type": "Automatic", + "description": "Keeps your Google software up to date. If this service is disabled or stopped, your Google software will not be kept up to date, meaning security vulnerabilities that may arise cannot be fixed and features may not work. This service uninstalls itself when there is no Google software using it.", + "display_name": "Google Update Service (gupdate)" + }, + { + "pid": 0, + "name": "gupdatem", + "status": "stopped", + "binpath": "\"C:\\Program Files (x86)\\Google\\Update\\GoogleUpdate.exe\" /medsvc", + "username": "LocalSystem", + "autodelay": true, + "start_type": "Manual", + "description": "Keeps your Google software up to date. If this service is disabled or stopped, your Google software will not be kept up to date, meaning security vulnerabilities that may arise cannot be fixed and features may not work. This service uninstalls itself when there is no Google software using it.", + "display_name": "Google Update Service (gupdatem)" + }, + { + "pid": 1908, + "name": "hidserv", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Activates and maintains the use of hot buttons on keyboards, remote controls, and other multimedia devices. It is recommended that you keep this service running.", + "display_name": "Human Interface Device Service" + }, + { + "pid": 0, + "name": "HvHost", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides an interface for the Hyper-V hypervisor to provide per-partition performance counters to the host operating system.", + "display_name": "HV Host Service" + }, + { + "pid": 0, + "name": "icssvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Provides the ability to share a cellular data connection with another device.", + "display_name": "Windows Mobile Hotspot Service" + }, + { + "pid": 2088, + "name": "igfxCUIService2.0.0.0", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\DriverStore\\FileRepository\\cui_dch.inf_amd64_f3a64c75ee4defb7\\igfxCUIService.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Service for Intel(R) HD Graphics Control Panel", + "display_name": "Intel(R) HD Graphics Control Panel Service" + }, + { + "pid": 0, + "name": "IKEEXT", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "The IKEEXT service hosts the Internet Key Exchange (IKE) and Authenticated Internet Protocol (AuthIP) keying modules. These keying modules are used for authentication and key exchange in Internet Protocol security (IPsec). Stopping or disabling the IKEEXT service will disable IKE and AuthIP key exchange with peer computers. IPsec is typically configured to use IKE or AuthIP; therefore, stopping or disabling the IKEEXT service might result in an IPsec failure and might compromise the security of the system. It is strongly recommended that you have the IKEEXT service running.", + "display_name": "IKE and AuthIP IPsec Keying Modules" + }, + { + "pid": 4724, + "name": "InstallService", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides infrastructure support for the Microsoft Store. This service is started on demand and if disabled then installations will not function properly.", + "display_name": "Microsoft Store Install Service" + }, + { + "pid": 3496, + "name": "iphlpsvc", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k NetSvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Provides tunnel connectivity using IPv6 transition technologies (6to4, ISATAP, Port Proxy, and Teredo), and IP-HTTPS. If this service is stopped, the computer will not have the enhanced connectivity benefits that these technologies offer.", + "display_name": "IP Helper" + }, + { + "pid": 0, + "name": "IpxlatCfgSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Configures and enables translation from v4 to v6 and vice versa", + "display_name": "IP Translation Configuration Service" + }, + { + "pid": 992, + "name": "KeyIso", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\lsass.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "The CNG key isolation service is hosted in the LSA process. The service provides key process isolation to private keys and associated cryptographic operations as required by the Common Criteria. The service stores and uses long-lived keys in a secure process complying with Common Criteria requirements.", + "display_name": "CNG Key Isolation" + }, + { + "pid": 0, + "name": "KtmRm", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k NetworkServiceAndNoImpersonation -p", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": false, + "start_type": "Manual", + "description": "Coordinates transactions between the Distributed Transaction Coordinator (MSDTC) and the Kernel Transaction Manager (KTM). If it is not needed, it is recommended that this service remain stopped. If it is needed, both MSDTC and KTM will start this service automatically. If this service is disabled, any MSDTC transaction interacting with a Kernel Resource Manager will fail and any services that explicitly depend on it will fail to start.", + "display_name": "KtmRm for Distributed Transaction Coordinator" + }, + { + "pid": 4596, + "name": "LanmanServer", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Supports file, print, and named-pipe sharing over the network for this computer. If this service is stopped, these functions will be unavailable. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Server" + }, + { + "pid": 3104, + "name": "LanmanWorkstation", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k NetworkService -p", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": false, + "start_type": "Automatic", + "description": "Creates and maintains client network connections to remote servers using the SMB protocol. If this service is stopped, these connections will be unavailable. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Workstation" + }, + { + "pid": 0, + "name": "lfsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "This service monitors the current location of the system and manages geofences (a geographical location with associated events). If you turn off this service, applications will be unable to use or receive notifications for geolocation or geofences.", + "display_name": "Geolocation Service" + }, + { + "pid": 1088, + "name": "LicenseManager", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalService -p", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Provides infrastructure support for the Microsoft Store. This service is started on demand and if disabled then content acquired through the Microsoft Store will not function properly.", + "display_name": "Windows License Manager Service" + }, + { + "pid": 0, + "name": "lltdsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Creates a Network Map, consisting of PC and device topology (connectivity) information, and metadata describing each PC and device. If this service is disabled, the Network Map will not function properly.", + "display_name": "Link-Layer Topology Discovery Mapper" + }, + { + "pid": 5392, + "name": "lmhosts", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Provides support for the NetBIOS over TCP/IP (NetBT) service and NetBIOS name resolution for clients on the network, therefore enabling users to share files, print, and log on to the network. If this service is stopped, these functions might be unavailable. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "TCP/IP NetBIOS Helper" + }, + { + "pid": 18872, + "name": "LogMeIn", + "status": "running", + "binpath": "\"C:\\Program Files (x86)\\LogMeIn\\x64\\LogMeIn.exe\"", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "", + "display_name": "LogMeIn" + }, + { + "pid": 0, + "name": "LxpSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides infrastructure support for deploying and configuring localized Windows resources. This service is started on demand and, if disabled, additional Windows languages will not be deployed to the system, and Windows may not function properly.", + "display_name": "Language Experience Service" + }, + { + "pid": 0, + "name": "MapsBroker", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k NetworkService -p", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": true, + "start_type": "Automatic", + "description": "Windows service for application access to downloaded maps. This service is started on-demand by application accessing downloaded maps. Disabling this service will prevent apps from accessing maps.", + "display_name": "Downloaded Maps Manager" + }, + { + "pid": 0, + "name": "MixedRealityOpenXRSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables Mixed Reality OpenXR runtime functionality", + "display_name": "Windows Mixed Reality OpenXR Service" + }, + { + "pid": 0, + "name": "MSiSCSI", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Manages Internet SCSI (iSCSI) sessions from this computer to remote iSCSI target devices. If this service is stopped, this computer will not be able to login or access iSCSI targets. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Microsoft iSCSI Initiator Service" + }, + { + "pid": 0, + "name": "msiserver", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\msiexec.exe /V", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Adds, modifies, and removes applications provided as a Windows Installer (*.msi, *.msp) package. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Windows Installer" + }, + { + "pid": 0, + "name": "NaturalAuthentication", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Signal aggregator service, that evaluates signals based on time, network, geolocation, bluetooth and cdf factors. Supported features are Device Unlock, Dynamic Lock and Dynamo MDM policies", + "display_name": "Natural Authentication" + }, + { + "pid": 0, + "name": "NcaSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k NetSvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides DirectAccess status notification for UI components", + "display_name": "Network Connectivity Assistant" + }, + { + "pid": 1612, + "name": "NcbService", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Brokers connections that allow Windows Store Apps to receive notifications from the internet.", + "display_name": "Network Connection Broker" + }, + { + "pid": 0, + "name": "NcdAutoSetup", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServiceNoNetwork -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Network Connected Devices Auto-Setup service monitors and installs qualified devices that connect to a qualified network. Stopping or disabling this service will prevent Windows from discovering and installing qualified network connected devices automatically. Users can still manually add network connected devices to a PC through the user interface.", + "display_name": "Network Connected Devices Auto-Setup" + }, + { + "pid": 992, + "name": "Netlogon", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\lsass.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Maintains a secure channel between this computer and the domain controller for authenticating users and services. If this service is stopped, the computer may not authenticate users and services and the domain controller cannot register DNS records. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Netlogon" + }, + { + "pid": 0, + "name": "Netman", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Manages objects in the Network and Dial-Up Connections folder, in which you can view both local area network and remote connections.", + "display_name": "Network Connections" + }, + { + "pid": 2824, + "name": "netprofm", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Identifies the networks to which the computer has connected, collects and stores properties for these networks, and notifies applications when these properties change.", + "display_name": "Network List Service" + }, + { + "pid": 0, + "name": "NetSetupSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "The Network Setup Service manages the installation of network drivers and permits the configuration of low-level network settings. If this service is stopped, any driver installations that are in-progress may be cancelled.", + "display_name": "Network Setup Service" + }, + { + "pid": 0, + "name": "NetTcpPortSharing", + "status": "stopped", + "binpath": "C:\\WINDOWS\\Microsoft.NET\\Framework64\\v4.0.30319\\SMSvcHost.exe", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Disabled", + "description": "Provides ability to share TCP ports over the net.tcp protocol.", + "display_name": "Net.Tcp Port Sharing Service" + }, + { + "pid": 2340, + "name": "NlaSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k NetworkService -p", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": false, + "start_type": "Automatic", + "description": "Collects and stores configuration information for the network and notifies programs when this information is modified. If this service is stopped, configuration information might be unavailable. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Network Location Awareness" + }, + { + "pid": 1476, + "name": "nsi", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Automatic", + "description": "This service delivers network notifications (e.g. interface addition/deleting etc) to user mode clients. Stopping this service will cause loss of network connectivity. If this service is disabled, any other services that explicitly depend on this service will fail to start.", + "display_name": "Network Store Interface Service" + }, + { + "pid": 0, + "name": "ose64", + "status": "stopped", + "binpath": "\"C:\\Program Files\\Common Files\\Microsoft Shared\\Source Engine\\OSE.EXE\"", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Saves installation files used for updates and repairs and is required for the downloading of Setup updates and Watson error reports.", + "display_name": "Office 64 Source Engine" + }, + { + "pid": 0, + "name": "p2pimsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServicePeerNet", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Provides identity services for the Peer Name Resolution Protocol (PNRP) and Peer-to-Peer Grouping services. If disabled, the Peer Name Resolution Protocol (PNRP) and Peer-to-Peer Grouping services may not function, and some applications, such as HomeGroup and Remote Assistance, may not function correctly.", + "display_name": "Peer Networking Identity Manager" + }, + { + "pid": 0, + "name": "p2psvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServicePeerNet", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Enables multi-party communication using Peer-to-Peer Grouping. If disabled, some applications, such as HomeGroup, may not function.", + "display_name": "Peer Networking Grouping" + }, + { + "pid": 2580, + "name": "PcaSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "This service provides support for the Program Compatibility Assistant (PCA). PCA monitors programs installed and run by the user and detects known compatibility problems. If this service is stopped, PCA will not function properly.", + "display_name": "Program Compatibility Assistant Service" + }, + { + "pid": 0, + "name": "PeerDistSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k PeerDist", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": false, + "start_type": "Manual", + "description": "This service caches network content from peers on the local subnet.", + "display_name": "BranchCache" + }, + { + "pid": 0, + "name": "perceptionsimulation", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\PerceptionSimulation\\PerceptionSimulationService.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables spatial perception simulation, virtual camera management and spatial input simulation.", + "display_name": "Windows Perception Simulation Service" + }, + { + "pid": 0, + "name": "PerfHost", + "status": "stopped", + "binpath": "C:\\WINDOWS\\SysWow64\\perfhost.exe", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Enables remote users and 64-bit processes to query performance counters provided by 32-bit DLLs. If this service is stopped, only local users and 32-bit processes will be able to query performance counters provided by 32-bit DLLs.", + "display_name": "Performance Counter DLL Host" + }, + { + "pid": 0, + "name": "PhoneSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Manages the telephony state on the device", + "display_name": "Phone Service" + }, + { + "pid": 0, + "name": "pla", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServiceNoNetwork -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Performance Logs and Alerts Collects performance data from local or remote computers based on preconfigured schedule parameters, then writes the data to a log or triggers an alert. If this service is stopped, performance information will not be collected. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Performance Logs & Alerts" + }, + { + "pid": 556, + "name": "PlugPlay", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k DcomLaunch -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables a computer to recognize and adapt to hardware changes with little or no user input. Stopping or disabling this service will result in system instability.", + "display_name": "Plug and Play" + }, + { + "pid": 0, + "name": "PNRPAutoReg", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServicePeerNet", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "This service publishes a machine name using the Peer Name Resolution Protocol. Configuration is managed via the netsh context 'p2p pnrp peer' ", + "display_name": "PNRP Machine Name Publication Service" + }, + { + "pid": 0, + "name": "PNRPsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServicePeerNet", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Enables serverless peer name resolution over the Internet using the Peer Name Resolution Protocol (PNRP). If disabled, some peer-to-peer and collaborative applications, such as Remote Assistance, may not function.", + "display_name": "Peer Name Resolution Protocol" + }, + { + "pid": 0, + "name": "PolicyAgent", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k NetworkServiceNetworkRestricted -p", + "username": "NT Authority\\NetworkService", + "autodelay": false, + "start_type": "Manual", + "description": "Internet Protocol security (IPsec) supports network-level peer authentication, data origin authentication, data integrity, data confidentiality (encryption), and replay protection. This service enforces IPsec policies created through the IP Security Policies snap-in or the command-line tool \"netsh ipsec\". If you stop this service, you may experience network connectivity issues if your policy requires that connections use IPsec. Also,remote management of Windows Defender Firewall is not available when this service is stopped.", + "display_name": "IPsec Policy Agent" + }, + { + "pid": 1032, + "name": "Power", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k DcomLaunch -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Manages power policy and power policy notification delivery.", + "display_name": "Power" + }, + { + "pid": 0, + "name": "PrintNotify", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k print", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "This service opens custom printer dialog boxes and handles notifications from a remote print server or a printer. If you turn off this service, you won’t be able to see printer extensions or notifications.", + "display_name": "Printer Extensions and Notifications" + }, + { + "pid": 1960, + "name": "ProfSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "This service is responsible for loading and unloading user profiles. If this service is stopped or disabled, users will no longer be able to successfully sign in or sign out, apps might have problems getting to users' data, and components registered to receive profile event notifications won't receive them.", + "display_name": "User Profile Service" + }, + { + "pid": 0, + "name": "PushToInstall", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides infrastructure support for the Microsoft Store. This service is started automatically and if disabled then remote installations will not function properly.", + "display_name": "Windows PushToInstall Service" + }, + { + "pid": 0, + "name": "QWAVE", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceAndNoImpersonation -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Quality Windows Audio Video Experience (qWave) is a networking platform for Audio Video (AV) streaming applications on IP home networks. qWave enhances AV streaming performance and reliability by ensuring network quality-of-service (QoS) for AV applications. It provides mechanisms for admission control, run time monitoring and enforcement, application feedback, and traffic prioritization.", + "display_name": "Quality Windows Audio Video Experience" + }, + { + "pid": 0, + "name": "RasAuto", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Creates a connection to a remote network whenever a program references a remote DNS or NetBIOS name or address.", + "display_name": "Remote Access Auto Connection Manager" + }, + { + "pid": 5048, + "name": "RasMan", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs", + "username": "localSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Manages dial-up and virtual private network (VPN) connections from this computer to the Internet or other remote networks. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Remote Access Connection Manager" + }, + { + "pid": 0, + "name": "RemoteAccess", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs", + "username": "localSystem", + "autodelay": false, + "start_type": "Disabled", + "description": "Offers routing services to businesses in local area and wide area network environments.", + "display_name": "Routing and Remote Access" + }, + { + "pid": 0, + "name": "RemoteRegistry", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k localService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Disabled", + "description": "Enables remote users to modify registry settings on this computer. If this service is stopped, the registry can be modified only by users on this computer. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Remote Registry" + }, + { + "pid": 0, + "name": "RetailDemo", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k rdxgroup", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "The Retail Demo service controls device activity while the device is in retail demo mode.", + "display_name": "Retail Demo Service" + }, + { + "pid": 0, + "name": "RpcLocator", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\locator.exe", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": false, + "start_type": "Manual", + "description": "In Windows 2003 and earlier versions of Windows, the Remote Procedure Call (RPC) Locator service manages the RPC name service database. In Windows Vista and later versions of Windows, this service does not provide any functionality and is present for application compatibility.", + "display_name": "Remote Procedure Call (RPC) Locator" + }, + { + "pid": 4436, + "name": "RtkAudioUniversalService", + "status": "running", + "binpath": "\"C:\\WINDOWS\\System32\\RtkAudUService64.exe\"", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Realtek Audio Universal Service", + "display_name": "Realtek Audio Universal Service" + }, + { + "pid": 992, + "name": "SamSs", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\lsass.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "The startup of this service signals other services that the Security Accounts Manager (SAM) is ready to accept requests. Disabling this service will prevent other services in the system from being notified when the SAM is ready, which may in turn cause those services to fail to start correctly. This service should not be disabled.", + "display_name": "Security Accounts Manager" + }, + { + "pid": 0, + "name": "SCardSvr", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceAndNoImpersonation", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Manages access to smart cards read by this computer. If this service is stopped, this computer will be unable to read smart cards. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Smart Card" + }, + { + "pid": 0, + "name": "ScDeviceEnum", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Creates software device nodes for all smart card readers accessible to a given session. If this service is disabled, WinRT APIs will not be able to enumerate smart card readers.", + "display_name": "Smart Card Device Enumeration Service" + }, + { + "pid": 1748, + "name": "Schedule", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Enables a user to configure and schedule automated tasks on this computer. The service also hosts multiple Windows system-critical tasks. If this service is stopped or disabled, these tasks will not be run at their scheduled times. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Task Scheduler" + }, + { + "pid": 0, + "name": "SCPolicySvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Allows the system to be configured to lock the user desktop upon smart card removal.", + "display_name": "Smart Card Removal Policy" + }, + { + "pid": 0, + "name": "SDRSVC", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k SDRSVC", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides Windows Backup and Restore capabilities.", + "display_name": "Windows Backup" + }, + { + "pid": 0, + "name": "seclogon", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables starting processes under alternate credentials. If this service is stopped, this type of logon access will be unavailable. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Secondary Logon" + }, + { + "pid": 0, + "name": "SEMgrSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Manages payments and Near Field Communication (NFC) based secure elements.", + "display_name": "Payments and NFC/SE Manager" + }, + { + "pid": 2928, + "name": "SENS", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Monitors system events and notifies subscribers to COM+ Event System of these events.", + "display_name": "System Event Notification Service" + }, + { + "pid": 0, + "name": "SensorDataService", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\SensorDataService.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Delivers data from a variety of sensors", + "display_name": "Sensor Data Service" + }, + { + "pid": 0, + "name": "SensorService", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "A service for sensors that manages different sensors' functionality. Manages Simple Device Orientation (SDO) and History for sensors. Loads the SDO sensor that reports device orientation changes. If this service is stopped or disabled, the SDO sensor will not be loaded and so auto-rotation will not occur. History collection from Sensors will also be stopped.", + "display_name": "Sensor Service" + }, + { + "pid": 0, + "name": "SensrSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceAndNoImpersonation -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Monitors various sensors in order to expose data and adapt to system and user state. If this service is stopped or disabled, the display brightness will not adapt to lighting conditions. Stopping this service may affect other system functionality and features as well.", + "display_name": "Sensor Monitoring Service" + }, + { + "pid": 3296, + "name": "SessionEnv", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Remote Desktop Configuration service (RDCS) is responsible for all Remote Desktop Services and Remote Desktop related configuration and session maintenance activities that require SYSTEM context. These include per-session temporary folders, RD themes, and RD certificates.", + "display_name": "Remote Desktop Configuration" + }, + { + "pid": 7520, + "name": "SgrmBroker", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\SgrmBroker.exe", + "username": "LocalSystem", + "autodelay": true, + "start_type": "Automatic", + "description": "Monitors and attests to the integrity of the Windows platform.", + "display_name": "System Guard Runtime Monitor Broker" + }, + { + "pid": 0, + "name": "SharedAccess", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides network address translation, addressing, name resolution and/or intrusion prevention services for a home or small office network.", + "display_name": "Internet Connection Sharing (ICS)" + }, + { + "pid": 0, + "name": "SharedRealitySvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "This service is used for Spatial Perception scenarios", + "display_name": "Spatial Data Service" + }, + { + "pid": 3632, + "name": "ShellHWDetection", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Provides notifications for AutoPlay hardware events.", + "display_name": "Shell Hardware Detection" + }, + { + "pid": 0, + "name": "shpamsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Disabled", + "description": "Manages profiles and accounts on a SharedPC configured device", + "display_name": "Shared PC Account Manager" + }, + { + "pid": 0, + "name": "smphost", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k smphost", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": false, + "start_type": "Manual", + "description": "Host service for the Microsoft Storage Spaces management provider. If this service is stopped or disabled, Storage Spaces cannot be managed.", + "display_name": "Microsoft Storage Spaces SMP" + }, + { + "pid": 0, + "name": "SNMPTRAP", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\snmptrap.exe", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Receives trap messages generated by local or remote Simple Network Management Protocol (SNMP) agents and forwards the messages to SNMP management programs running on this computer. If this service is stopped, SNMP-based programs on this computer will not receive SNMP trap messages. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "SNMP Trap" + }, + { + "pid": 0, + "name": "spectrum", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\spectrum.exe", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Enables spatial perception, spatial input, and holographic rendering.", + "display_name": "Windows Perception Service" + }, + { + "pid": 4104, + "name": "Spooler", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\spoolsv.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "This service spools print jobs and handles interaction with the printer. If you turn off this service, you won’t be able to print or see your printers.", + "display_name": "Print Spooler" + }, + { + "pid": 52504, + "name": "sppsvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\sppsvc.exe", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": true, + "start_type": "Automatic", + "description": "Enables the download, installation and enforcement of digital licenses for Windows and Windows applications. If the service is disabled, the operating system and licensed applications may run in a notification mode. It is strongly recommended that you not disable the Software Protection service.", + "display_name": "Software Protection" + }, + { + "pid": 3808, + "name": "SSDPSRV", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceAndNoImpersonation -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Discovers networked devices and services that use the SSDP discovery protocol, such as UPnP devices. Also announces SSDP devices and services running on the local computer. If this service is stopped, SSDP-based devices will not be discovered. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "SSDP Discovery" + }, + { + "pid": 0, + "name": "ssh-agent", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\OpenSSH\\ssh-agent.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Disabled", + "description": "Agent to hold private keys used for public key authentication.", + "display_name": "OpenSSH Authentication Agent" + }, + { + "pid": 29064, + "name": "sshd", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\OpenSSH\\sshd.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "SSH protocol based service to provide secure encrypted communications between two untrusted hosts over an insecure network.", + "display_name": "OpenSSH SSH Server" + }, + { + "pid": 4412, + "name": "SstpSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Provides support for the Secure Socket Tunneling Protocol (SSTP) to connect to remote computers using VPN. If this service is disabled, users will not be able to use SSTP to access remote servers.", + "display_name": "Secure Socket Tunneling Protocol Service" + }, + { + "pid": 3020, + "name": "StateRepository", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k appmodel -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides required infrastructure support for the application model.", + "display_name": "State Repository Service" + }, + { + "pid": 0, + "name": "stisvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k imgsvc", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Provides image acquisition services for scanners and cameras", + "display_name": "Windows Image Acquisition (WIA)" + }, + { + "pid": 1196, + "name": "StorSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": true, + "start_type": "Automatic", + "description": "Provides enabling services for storage settings and external storage expansion", + "display_name": "Storage Service" + }, + { + "pid": 0, + "name": "svsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Verifies potential file system corruptions.", + "display_name": "Spot Verifier" + }, + { + "pid": 0, + "name": "swprv", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k swprv", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Manages software-based volume shadow copies taken by the Volume Shadow Copy service. If this service is stopped, software-based volume shadow copies cannot be managed. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Microsoft Software Shadow Copy Provider" + }, + { + "pid": 2680, + "name": "SysMain", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Maintains and improves system performance over time.", + "display_name": "SysMain" + }, + { + "pid": 3744, + "name": "TabletInputService", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables Touch Keyboard and Handwriting Panel pen and ink functionality", + "display_name": "Touch Keyboard and Handwriting Panel Service" + }, + { + "pid": 0, + "name": "TapiSrv", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k NetworkService -p", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": false, + "start_type": "Manual", + "description": "Provides Telephony API (TAPI) support for programs that control telephony devices on the local computer and, through the LAN, on servers that are also running the service.", + "display_name": "Telephony" + }, + { + "pid": 1364, + "name": "TermService", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k NetworkService", + "username": "NT Authority\\NetworkService", + "autodelay": false, + "start_type": "Manual", + "description": "Allows users to connect interactively to a remote computer. Remote Desktop and Remote Desktop Session Host Server depend on this service. To prevent remote use of this computer, clear the checkboxes on the Remote tab of the System properties control panel item.", + "display_name": "Remote Desktop Services" + }, + { + "pid": 2624, + "name": "Themes", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Provides user experience theme management.", + "display_name": "Themes" + }, + { + "pid": 0, + "name": "TieringEngineService", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\TieringEngineService.exe", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Optimizes the placement of data in storage tiers on all tiered storage spaces in the system.", + "display_name": "Storage Tiers Management" + }, + { + "pid": 984, + "name": "TokenBroker", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "This service is used by Web Account Manager to provide single-sign-on to apps and services.", + "display_name": "Web Account Manager" + }, + { + "pid": 4476, + "name": "TrkWks", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Maintains links between NTFS files within a computer or across computers in a network.", + "display_name": "Distributed Link Tracking Client" + }, + { + "pid": 0, + "name": "TroubleshootingSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables automatic mitigation for known problems by applying recommended troubleshooting. If stopped, your device will not get recommended troubleshooting for problems on your device.", + "display_name": "Recommended Troubleshooting Service" + }, + { + "pid": 0, + "name": "TrustedInstaller", + "status": "stopped", + "binpath": "C:\\WINDOWS\\servicing\\TrustedInstaller.exe", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables installation, modification, and removal of Windows updates and optional components. If this service is disabled, install or uninstall of Windows updates might fail for this computer.", + "display_name": "Windows Modules Installer" + }, + { + "pid": 0, + "name": "tzautoupdate", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Disabled", + "description": "Automatically sets the system time zone.", + "display_name": "Auto Time Zone Updater" + }, + { + "pid": 0, + "name": "UevAgentService", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\AgentService.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Disabled", + "description": "Provides support for application and OS settings roaming", + "display_name": "User Experience Virtualization Service" + }, + { + "pid": 2396, + "name": "UmRdpService", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Allows the redirection of Printers/Drives/Ports for RDP connections", + "display_name": "Remote Desktop Services UserMode Port Redirector" + }, + { + "pid": 0, + "name": "upnphost", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceAndNoImpersonation -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Allows UPnP devices to be hosted on this computer. If this service is stopped, any hosted UPnP devices will stop functioning and no additional hosted devices can be added. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "UPnP Device Host" + }, + { + "pid": 2196, + "name": "UserManager", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "User Manager provides the runtime components required for multi-user interaction. If this service is stopped, some applications may not operate correctly.", + "display_name": "User Manager" + }, + { + "pid": 7208, + "name": "UsoSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": true, + "start_type": "Automatic", + "description": "Manages Windows Updates. If stopped, your devices will not be able to download and install the latest updates.", + "display_name": "Update Orchestrator Service" + }, + { + "pid": 0, + "name": "VacSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Hosts spatial analysis for Mixed Reality audio simulation.", + "display_name": "Volumetric Audio Compositor Service" + }, + { + "pid": 0, + "name": "VaultSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\lsass.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides secure storage and retrieval of credentials to users, applications and security service packages.", + "display_name": "Credential Manager" + }, + { + "pid": 0, + "name": "vds", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\vds.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides management services for disks, volumes, file systems, and storage arrays.", + "display_name": "Virtual Disk" + }, + { + "pid": 0, + "name": "vmicguestinterface", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides an interface for the Hyper-V host to interact with specific services running inside the virtual machine.", + "display_name": "Hyper-V Guest Service Interface" + }, + { + "pid": 0, + "name": "vmicheartbeat", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k ICService -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Monitors the state of this virtual machine by reporting a heartbeat at regular intervals. This service helps you identify running virtual machines that have stopped responding.", + "display_name": "Hyper-V Heartbeat Service" + }, + { + "pid": 0, + "name": "vmickvpexchange", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides a mechanism to exchange data between the virtual machine and the operating system running on the physical computer.", + "display_name": "Hyper-V Data Exchange Service" + }, + { + "pid": 0, + "name": "vmicrdv", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k ICService -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides a platform for communication between the virtual machine and the operating system running on the physical computer.", + "display_name": "Hyper-V Remote Desktop Virtualization Service" + }, + { + "pid": 0, + "name": "vmicshutdown", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides a mechanism to shut down the operating system of this virtual machine from the management interfaces on the physical computer.", + "display_name": "Hyper-V Guest Shutdown Service" + }, + { + "pid": 0, + "name": "vmictimesync", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Synchronizes the system time of this virtual machine with the system time of the physical computer.", + "display_name": "Hyper-V Time Synchronization Service" + }, + { + "pid": 0, + "name": "vmicvmsession", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides a mechanism to manage virtual machine with PowerShell via VM session without a virtual network.", + "display_name": "Hyper-V PowerShell Direct Service" + }, + { + "pid": 0, + "name": "vmicvss", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Coordinates the communications that are required to use Volume Shadow Copy Service to back up applications and data on this virtual machine from the operating system on the physical computer.", + "display_name": "Hyper-V Volume Shadow Copy Requestor" + }, + { + "pid": 0, + "name": "VSS", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\vssvc.exe", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Manages and implements Volume Shadow Copies used for backup and other purposes. If this service is stopped, shadow copies will be unavailable for backup and the backup may fail. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Volume Shadow Copy" + }, + { + "pid": 1516, + "name": "W32Time", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Maintains date and time synchronization on all clients and servers in the network. If this service is stopped, date and time synchronization will be unavailable. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Windows Time" + }, + { + "pid": 0, + "name": "WaaSMedicSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k wusvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables remediation and protection of Windows Update components.", + "display_name": "Windows Update Medic Service" + }, + { + "pid": 0, + "name": "WalletService", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k appmodel -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Hosts objects used by clients of the wallet", + "display_name": "WalletService" + }, + { + "pid": 0, + "name": "WarpJITSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServiceNetworkRestricted", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Provides a JIT out of process service for WARP when running with ACG enabled.", + "display_name": "WarpJITSvc" + }, + { + "pid": 0, + "name": "wbengine", + "status": "stopped", + "binpath": "\"C:\\WINDOWS\\system32\\wbengine.exe\"", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "The WBENGINE service is used by Windows Backup to perform backup and recovery operations. If this service is stopped by a user, it may cause the currently running backup or recovery operation to fail. Disabling this service may disable backup and recovery operations using Windows Backup on this computer.", + "display_name": "Block Level Backup Engine Service" + }, + { + "pid": 23184, + "name": "WbioSrvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k WbioSvcGroup", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "The Windows biometric service gives client applications the ability to capture, compare, manipulate, and store biometric data without gaining direct access to any biometric hardware or samples. The service is hosted in a privileged SVCHOST process.", + "display_name": "Windows Biometric Service" + }, + { + "pid": 3828, + "name": "Wcmsvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Automatic", + "description": "Makes automatic connect/disconnect decisions based on the network connectivity options currently available to the PC and enables management of network connectivity based on Group Policy settings.", + "display_name": "Windows Connection Manager" + }, + { + "pid": 0, + "name": "wcncsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalServiceAndNoImpersonation -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "WCNCSVC hosts the Windows Connect Now Configuration which is Microsoft's Implementation of Wireless Protected Setup (WPS) protocol. This is used to configure Wireless LAN settings for an Access Point (AP) or a Wireless Device. The service is started programmatically as needed.", + "display_name": "Windows Connect Now - Config Registrar" + }, + { + "pid": 4824, + "name": "WdiServiceHost", + "status": "running", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "The Diagnostic Service Host is used by the Diagnostic Policy Service to host diagnostics that need to run in a Local Service context. If this service is stopped, any diagnostics that depend on it will no longer function.", + "display_name": "Diagnostic Service Host" + }, + { + "pid": 0, + "name": "WdiSystemHost", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "The Diagnostic System Host is used by the Diagnostic Policy Service to host diagnostics that need to run in a Local System context. If this service is stopped, any diagnostics that depend on it will no longer function.", + "display_name": "Diagnostic System Host" + }, + { + "pid": 0, + "name": "WebClient", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Enables Windows-based programs to create, access, and modify Internet-based files. If this service is stopped, these functions will not be available. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "WebClient" + }, + { + "pid": 0, + "name": "Wecsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k NetworkService -p", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": false, + "start_type": "Manual", + "description": "This service manages persistent subscriptions to events from remote sources that support WS-Management protocol. This includes Windows Vista event logs, hardware and IPMI-enabled event sources. The service stores forwarded events in a local Event Log. If this service is stopped or disabled event subscriptions cannot be created and forwarded events cannot be accepted.", + "display_name": "Windows Event Collector" + }, + { + "pid": 0, + "name": "WEPHOSTSVC", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k WepHostSvcGroup", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Windows Encryption Provider Host Service brokers encryption related functionalities from 3rd Party Encryption Providers to processes that need to evaluate and apply EAS policies. Stopping this will compromise EAS compliancy checks that have been established by the connected Mail Accounts", + "display_name": "Windows Encryption Provider Host Service" + }, + { + "pid": 0, + "name": "wercplsupport", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k netsvcs -p", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "This service provides support for viewing, sending and deletion of system-level problem reports for the Problem Reports control panel.", + "display_name": "Problem Reports Control Panel Support" + }, + { + "pid": 0, + "name": "WerSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k WerSvcGroup", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Allows errors to be reported when programs stop working or responding and allows existing solutions to be delivered. Also allows logs to be generated for diagnostic and repair services. If this service is stopped, error reporting might not work correctly and results of diagnostic services and repairs might not be displayed.", + "display_name": "Windows Error Reporting Service" + }, + { + "pid": 0, + "name": "WFDSConMgrSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "Manages connections to wireless services, including wireless display and docking.", + "display_name": "Wi-Fi Direct Services Connection Manager Service" + }, + { + "pid": 0, + "name": "WiaRpc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Launches applications associated with still image acquisition events.", + "display_name": "Still Image Acquisition Events" + }, + { + "pid": 3408, + "name": "Winmgmt", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "localSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Provides a common interface and object model to access management information about operating system, devices, applications and services. If this service is stopped, most Windows-based software will not function properly. If this service is disabled, any services that explicitly depend on it will fail to start.", + "display_name": "Windows Management Instrumentation" + }, + { + "pid": 0, + "name": "WinRM", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k NetworkService -p", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": true, + "start_type": "Manual", + "description": "Windows Remote Management (WinRM) service implements the WS-Management protocol for remote management. WS-Management is a standard web services protocol used for remote software and hardware management. The WinRM service listens on the network for WS-Management requests and processes them. The WinRM Service needs to be configured with a listener using winrm.cmd command line tool or through Group Policy in order for it to listen over the network. The WinRM service provides access to WMI data and enables event collection. Event collection and subscription to events require that the service is running. WinRM messages use HTTP and HTTPS as transports. The WinRM service does not depend on IIS but is preconfigured to share a port with IIS on the same machine. The WinRM service reserves the /wsman URL prefix. To prevent conflicts with IIS, administrators should ensure that any websites hosted on IIS do not use the /wsman URL prefix.", + "display_name": "Windows Remote Management (WS-Management)" + }, + { + "pid": 0, + "name": "wisvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides infrastructure support for the Windows Insider Program. This service must remain enabled for the Windows Insider Program to work.", + "display_name": "Windows Insider Service" + }, + { + "pid": 4032, + "name": "WlanSvc", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "The WLANSVC service provides the logic required to configure, discover, connect to, and disconnect from a wireless local area network (WLAN) as defined by IEEE 802.11 standards. It also contains the logic to turn your computer into a software access point so that other devices or computers can connect to your computer wirelessly using a WLAN adapter that can support this. Stopping or disabling the WLANSVC service will make all WLAN adapters on your computer inaccessible from the Windows networking UI. It is strongly recommended that you have the WLANSVC service running if your computer has a WLAN adapter.", + "display_name": "WLAN AutoConfig" + }, + { + "pid": 0, + "name": "wlidsvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables user sign-in through Microsoft account identity services. If this service is stopped, users will not be able to logon to the computer with their Microsoft account.", + "display_name": "Microsoft Account Sign-in Assistant" + }, + { + "pid": 0, + "name": "wlpasvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalServiceNetworkRestricted -p", + "username": "NT Authority\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "This service provides profile management for subscriber identity modules", + "display_name": "Local Profile Assistant Service" + }, + { + "pid": 0, + "name": "WManSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Performs management including Provisioning and Enrollment activities", + "display_name": "Windows Management Service" + }, + { + "pid": 0, + "name": "wmiApSrv", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\wbem\\WmiApSrv.exe", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides performance library information from Windows Management Instrumentation (WMI) providers to clients on the network. This service only runs when Performance Data Helper is activated.", + "display_name": "WMI Performance Adapter" + }, + { + "pid": 0, + "name": "WMPNetworkSvc", + "status": "stopped", + "binpath": "\"C:\\Program Files\\Windows Media Player\\wmpnetwk.exe\"", + "username": "NT AUTHORITY\\NetworkService", + "autodelay": false, + "start_type": "Manual", + "description": "Shares Windows Media Player libraries to other networked players and media devices using Universal Plug and Play", + "display_name": "Windows Media Player Network Sharing Service" + }, + { + "pid": 0, + "name": "workfolderssvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\System32\\svchost.exe -k LocalService -p", + "username": "NT AUTHORITY\\LocalService", + "autodelay": false, + "start_type": "Manual", + "description": "This service syncs files with the Work Folders server, enabling you to use the files on any of the PCs and devices on which you've set up Work Folders.", + "display_name": "Work Folders" + }, + { + "pid": 0, + "name": "WpcMonSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalService", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enforces parental controls for child accounts in Windows. If this service is stopped or disabled, parental controls may not be enforced.", + "display_name": "Parental Controls" + }, + { + "pid": 0, + "name": "WPDBusEnum", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enforces group policy for removable mass-storage devices. Enables applications such as Windows Media Player and Image Import Wizard to transfer and synchronize content using removable mass-storage devices.", + "display_name": "Portable Device Enumerator Service" + }, + { + "pid": 4532, + "name": "WpnService", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "This service runs in session 0 and hosts the notification platform and connection provider which handles the connection between the device and WNS server.", + "display_name": "Windows Push Notifications System Service" + }, + { + "pid": 5980, + "name": "WSearch", + "status": "running", + "binpath": "C:\\WINDOWS\\system32\\SearchIndexer.exe /Embedding", + "username": "LocalSystem", + "autodelay": true, + "start_type": "Automatic", + "description": "Provides content indexing, property caching, and search results for files, e-mail, and other content.", + "display_name": "Windows Search" + }, + { + "pid": 0, + "name": "wuauserv", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Enables the detection, download, and installation of updates for Windows and other programs. If this service is disabled, users of this computer will not be able to use Windows Update or its automatic updating feature, and programs will not be able to use the Windows Update Agent (WUA) API.", + "display_name": "Windows Update" + }, + { + "pid": 0, + "name": "WwanSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k LocalSystemNetworkRestricted -p", + "username": "localSystem", + "autodelay": false, + "start_type": "Manual", + "description": "This service manages mobile broadband (GSM & CDMA) data card/embedded module adapters and connections by auto-configuring the networks. It is strongly recommended that this service be kept running for best user experience of mobile broadband devices.", + "display_name": "WWAN AutoConfig" + }, + { + "pid": 0, + "name": "XblAuthManager", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "Provides authentication and authorization services for interacting with Xbox Live. If this service is stopped, some applications may not operate correctly.", + "display_name": "Xbox Live Auth Manager" + }, + { + "pid": 0, + "name": "XblGameSave", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "This service syncs save data for Xbox Live save enabled games. If this service is stopped, game save data will not upload to or download from Xbox Live.", + "display_name": "Xbox Live Game Save" + }, + { + "pid": 0, + "name": "XboxGipSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "This service manages connected Xbox Accessories.", + "display_name": "Xbox Accessory Management Service" + }, + { + "pid": 0, + "name": "XboxNetApiSvc", + "status": "stopped", + "binpath": "C:\\WINDOWS\\system32\\svchost.exe -k netsvcs -p", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Manual", + "description": "This service supports the Windows.Networking.XboxLive application programming interface.", + "display_name": "Xbox Live Networking Service" + }, + { + "pid": 46520, + "name": "LMIGuardianSvc", + "status": "running", + "binpath": "\"C:\\Program Files (x86)\\LogMeIn\\x64\\LMIGuardianSvc.exe\"", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Support LogMeIn processes with quality assurance feedback", + "display_name": "LMIGuardianSvc" + }, + { + "pid": 33952, + "name": "LMIMaint", + "status": "running", + "binpath": "\"C:\\Program Files (x86)\\LogMeIn\\x64\\RaMaint.exe\"", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "", + "display_name": "LogMeIn Maintenance Service" + }, + { + "pid": 50408, + "name": "Mesh Agent", + "status": "running", + "binpath": "\"C:\\Program Files\\Mesh Agent\\MeshAgent.exe\" ", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Mesh Agent background service", + "display_name": "Mesh Agent" + }, + { + "pid": 49248, + "name": "tacticalrpc", + "status": "running", + "binpath": "\"C:\\Program Files\\TacticalAgent\\nssm.exe\"", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Tactical RMM RPC Service", + "display_name": "Tactical RMM RPC Service" + }, + { + "pid": 53168, + "name": "tacticalagent", + "status": "running", + "binpath": "\"C:\\Program Files\\TacticalAgent\\nssm.exe\"", + "username": "LocalSystem", + "autodelay": false, + "start_type": "Automatic", + "description": "Tactical RMM Agent", + "display_name": "Tactical RMM Agent" + } +] \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/test_data/winupdates.json b/api/tacticalrmm/tacticalrmm/test_data/winupdates.json new file mode 100644 index 0000000000..1a4b7e7dbc --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/winupdates.json @@ -0,0 +1,319 @@ +{ + "samplecomputer": { + "07609d43-d518-4e77-856e-d1b316d1b8a8": { + "guid": "07609d43-d518-4e77-856e-d1b316d1b8a8", + "Title": "MSXML 6.0 RTM Security Update (925673)", + "Type": "Software", + "Description": "A vulnerability exists in Microsoft XML Core Services that could allow for information disclosure because the XMLHTTP ActiveX control incorrectly interprets an HTTP server-side redirect.", + "Downloaded": true, + "Installed": true, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "Critical", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB925673" + ], + "Categories": [ + "Security Updates", + "SQL Server Feature Pack" + ] + }, + "729a0dcb-df9e-4d02-b603-ed1aee074428": { + "guid": "729a0dcb-df9e-4d02-b603-ed1aee074428", + "Title": "Security Update for Microsoft Visual C++ 2008 Service Pack 1 Redistributable Package (KB2538243)", + "Type": "Software", + "Description": "A security issue has been identified leading to MFC application vulnerability in DLL planting due to MFC not specifying the full path to system/localization DLLs. You can protect your computer by installing this update from Microsoft. After you install this item, you may have to restart your computer.", + "Downloaded": true, + "Installed": true, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "Important", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB2538243" + ], + "Categories": [ + "Security Updates", + "Visual Studio 2008" + ] + }, + "527b2c0c-b10b-433d-9e35-4be03c28768a": { + "guid": "527b2c0c-b10b-433d-9e35-4be03c28768a", + "Title": "Update for Microsoft Office 2010 (KB2553347) 64-Bit Edition", + "Type": "Software", + "Description": "Microsoft has released an update for Microsoft Office 2010 64-Bit Edition. This update provides the latest fixes to Microsoft Office 2010 64-Bit Edition. Additionally, this update contains stability and performance improvements.", + "Downloaded": true, + "Installed": true, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB2553347" + ], + "Categories": [ + "Critical Updates", + "Office 2010" + ] + }, + "7a7f49fc-15e8-4760-b750-e7c57d1bdb02": { + "guid": "7a7f49fc-15e8-4760-b750-e7c57d1bdb02", + "Title": "Security Update for Microsoft Office 2010 (KB4022206) 64-Bit Edition", + "Type": "Software", + "Description": "A security vulnerability exists in Microsoft Office 2010 64-Bit Edition that could allow arbitrary code to run when a maliciously modified file is opened. This update resolves that vulnerability.", + "Downloaded": true, + "Installed": true, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB4022206" + ], + "Categories": [ + "Office 2010", + "Security Updates" + ] + }, + "c168fa28-799f-4643-a45b-23d9d50875a9": { + "guid": "c168fa28-799f-4643-a45b-23d9d50875a9", + "Title": "Update for Microsoft Office 2010 (KB4461579) 64-Bit Edition", + "Type": "Software", + "Description": "Microsoft has released an update for Microsoft Office 2010 64-Bit Edition. This update provides the latest fixes to Microsoft Office 2010 64-Bit Edition. Additionally, this update contains stability and performance improvements.", + "Downloaded": true, + "Installed": true, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB4461579" + ], + "Categories": [ + "Critical Updates", + "Office 2010" + ] + }, + "ca3bb521-a8ea-4e26-a563-2ad6e3108b9a": { + "guid": "ca3bb521-a8ea-4e26-a563-2ad6e3108b9a", + "Title": "Microsoft Silverlight (KB4481252)", + "Type": "Software", + "Description": "Microsoft Silverlight is a Web browser plug-in for Windows and Mac OS X that delivers high quality video/audio, animation, and richer Website experiences in popular Web browsers.", + "Downloaded": false, + "Installed": false, + "Mandatory": false, + "EULAAccepted": false, + "NeedsReboot": false, + "Severity": "", + "UserInput": false, + "RebootBehavior": "Never Requires Reboot", + "KBs": [ + "KB4481252" + ], + "Categories": [ + "Feature Packs", + "Silverlight" + ] + }, + "1edff8d4-bc5c-44e3-93ee-d123b6fd5c05": { + "guid": "1edff8d4-bc5c-44e3-93ee-d123b6fd5c05", + "Title": "Update for Microsoft Office 2010 (KB2589339) 64-Bit Edition", + "Type": "Software", + "Description": "Microsoft has released an update for Microsoft Office 2010 64-Bit Edition. This update provides the latest fixes to Microsoft Office 2010 64-Bit Edition. Additionally, this update contains stability and performance improvements.", + "Downloaded": true, + "Installed": true, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB2589339" + ], + "Categories": [ + "Critical Updates", + "Office 2010" + ] + }, + "c9805b1b-e4e4-4179-91c5-fb3a57aa3368": { + "guid": "c9805b1b-e4e4-4179-91c5-fb3a57aa3368", + "Title": "Security Update for Microsoft Office 2010 (KB4484238) 64-Bit Edition", + "Type": "Software", + "Description": "A security vulnerability exists in Microsoft Office 2010 64-Bit Edition that could allow arbitrary code to run when a maliciously modified file is opened. This update resolves that vulnerability.", + "Downloaded": false, + "Installed": false, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "Important", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB4484238" + ], + "Categories": [ + "Office 2010", + "Security Updates" + ] + }, + "2221dd34-39bb-4f16-b320-be49fe4a6b95": { + "guid": "2221dd34-39bb-4f16-b320-be49fe4a6b95", + "Title": "Windows Malicious Software Removal Tool x64 - v5.82 (KB890830)", + "Type": "Software", + "Description": "After the download, this tool runs one time to check your computer for infection by specific, prevalent malicious software (including Blaster, Sasser, and Mydoom) and helps remove any infection that is found. If an infection is found, the tool will display a status report the next time that you start your computer. A new version of the tool will be offered every month. If you want to manually run the tool on your computer, you can download a copy from the Microsoft Download Center, or you can run an online version from microsoft.com. This tool is not a replacement for an antivirus product. To help protect your computer, you should use an antivirus product.", + "Downloaded": true, + "Installed": false, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB890830" + ], + "Categories": [ + "Update Rollups", + "Windows Server 2016", + "Windows Server 2019" + ] + }, + "884a6101-3b1a-4b53-bede-2f8b6bf14772": { + "guid": "884a6101-3b1a-4b53-bede-2f8b6bf14772", + "Title": "2020-01 Update for Windows Server 2019 for x64-based Systems (KB4494174)", + "Type": "Software", + "Description": "Install this update to resolve issues in Windows. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article for more information. After you install this item, you may have to restart your computer.", + "Downloaded": true, + "Installed": true, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB4494174" + ], + "Categories": [ + "Updates", + "Windows Server 2019" + ] + }, + "df5a6ec0-890e-4fb4-9a91-df999a4a5c46": { + "guid": "df5a6ec0-890e-4fb4-9a91-df999a4a5c46", + "Title": "Security Update for Microsoft Office 2010 (KB4484373) 64-Bit Edition", + "Type": "Software", + "Description": "A security vulnerability exists in Microsoft Office 2010 64-Bit Edition that could allow arbitrary code to run when a maliciously modified file is opened. This update resolves that vulnerability.", + "Downloaded": true, + "Installed": false, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "Important", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB4484373" + ], + "Categories": [ + "Office 2010", + "Security Updates" + ] + }, + "14b1604e-c818-4fae-b1df-2bd789ec173a": { + "guid": "14b1604e-c818-4fae-b1df-2bd789ec173a", + "Title": "2020-06 Security Update for Adobe Flash Player for Windows Server 2019 for x64-based Systems (KB4561600)", + "Type": "Software", + "Description": "A security issue has been identified in a Microsoft software product that could affect your system. You can help protect your system by installing this update from Microsoft. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article. After you install this update, you may have to restart your system.", + "Downloaded": true, + "Installed": false, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "Critical", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB4561600" + ], + "Categories": [ + "Security Updates", + "Windows Server 2019" + ] + }, + "9aab9121-0766-4f06-8204-61da23cc34b9": { + "guid": "9aab9121-0766-4f06-8204-61da23cc34b9", + "Title": "SQL Server 2019 RTM Cumulative Update (CU) 5 KB4552255", + "Type": "Software", + "Description": "CU5 for SQL Server 2019 RTM upgraded all SQL Server 2019 RTM instances and components installed through the SQL Server setup. CU5 can upgrade all editions and servicing levels of SQL Server 2019 RTM to the CU5 level. For customers in need of additional installation options, please visit the Microsoft Download Center to download the latest Cumulative Update (https://support.microsoft.com/en-us/kb/957826). To learn more about SQL Server 2019 RTM CU5, please visit the Microsoft Support (http://support.microsoft.com) Knowledge Base article KB4552255.", + "Downloaded": false, + "Installed": false, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB4552255" + ], + "Categories": [ + "Microsoft SQL Server 2019", + "Updates" + ] + }, + "0d506775-e391-41bd-b932-d79df9147c9b": { + "guid": "0d506775-e391-41bd-b932-d79df9147c9b", + "Title": "2020-07 Cumulative Update for .NET Framework 3.5, 4.7.2 and 4.8 for Windows Server 2019 for x64 (KB4566516)", + "Type": "Software", + "Description": "A security issue has been identified in a Microsoft software product that could affect your system. You can help protect your system by installing this update from Microsoft. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article. After you install this update, you may have to restart your system.", + "Downloaded": true, + "Installed": false, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "Critical", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB4566516" + ], + "Categories": [ + "Security Updates", + "Windows Server 2019" + ] + }, + "0641752f-29fb-48d7-a3cf-f93dde26b82b": { + "guid": "0641752f-29fb-48d7-a3cf-f93dde26b82b", + "Title": "2020-07 Cumulative Update for Windows Server 2019 (1809) for x64-based Systems (KB4558998)", + "Type": "Software", + "Description": "Install this update to resolve issues in Windows. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article for more information. After you install this item, you may have to restart your computer.", + "Downloaded": true, + "Installed": false, + "Mandatory": false, + "EULAAccepted": true, + "NeedsReboot": false, + "Severity": "", + "UserInput": false, + "RebootBehavior": "Can Require Reboot", + "KBs": [ + "KB4558998" + ], + "Categories": [ + "Security Updates" + ] + } + } +} \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/test_data/wmi1.json b/api/tacticalrmm/tacticalrmm/test_data/wmi1.json new file mode 100644 index 0000000000..4714d8dc66 --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/wmi1.json @@ -0,0 +1,2397 @@ +{ + "graphics": [ + [ + { + "Name": "NVIDIA Quadro P520", + "Status": "OK", + "Caption": "NVIDIA Quadro P520", + "DeviceID": "VideoController1", + "AdapterRAM": 2147483648, + "DriverDate": "2020-11-20T00:00:00Z", + "SystemName": "VNVMHOSTSRV4", + "Description": "NVIDIA Quadro P520", + "InstallDate": "0001-01-01T00:00:00Z", + "Availability": 3, + "DriverVersion": "27.21.14.5266", + "AdapterDACType": "Integrated RAMDAC", + "MaxRefreshRate": 0, + "MinRefreshRate": 0, + "VideoProcessor": "Quadro P520", + "TimeOfLastReset": "0001-01-01T00:00:00Z", + "CurrentRefreshRate": 60, + "MaxMemorySupported": 0, + "AdapterCompatibility": "NVIDIA", + "VideoModeDescription": "2560 x 1440 x 4294967296 colors", + "CapabilityDescriptions": null, + "AcceleratorCapabilities": null, + "InstalledDisplayDrivers": "C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll", + "SystemCreationClassName": "Win32_ComputerSystem", + "CurrentVerticalResolution": 1440 + } + ], + [ + { + "Name": "Intel(R) UHD Graphics 620", + "Status": "OK", + "Caption": "Intel(R) UHD Graphics 620", + "DeviceID": "VideoController2", + "AdapterRAM": 1073741824, + "DriverDate": "2020-10-28T00:00:00Z", + "SystemName": "VNVMHOSTSRV4", + "Description": "Intel(R) UHD Graphics 620", + "InstallDate": "0001-01-01T00:00:00Z", + "Availability": 3, + "DriverVersion": "27.20.100.8935", + "AdapterDACType": "Internal", + "MaxRefreshRate": 60, + "MinRefreshRate": 29, + "VideoProcessor": "Intel(R) UHD Graphics Family", + "TimeOfLastReset": "0001-01-01T00:00:00Z", + "CurrentRefreshRate": 59, + "MaxMemorySupported": 0, + "AdapterCompatibility": "Intel Corporation", + "VideoModeDescription": "3840 x 1600 x 4294967296 colors", + "CapabilityDescriptions": null, + "AcceleratorCapabilities": null, + "InstalledDisplayDrivers": "C:\\Windows\\System32\\DriverStore\\FileRepository\\iigd_dch.inf_amd64_997a69017605b77c\\igdumdim64.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\iigd_dch.inf_amd64_997a69017605b77c\\igd10iumd64.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\iigd_dch.inf_amd64_997a69017605b77c\\igd10iumd64.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\iigd_dch.inf_amd64_997a69017605b77c\\igd12umd64.dll", + "SystemCreationClassName": "Win32_ComputerSystem", + "CurrentVerticalResolution": 1600 + } + ] + ], + "os": [ + [ + { + "Name": "Microsoft Windows Server 2019 Standard|C:\\Windows|\\Device\\Harddisk2\\Partition4", + "Debug": false, + "CSName": "VNVMHOSTSRV4", + "Locale": "0409", + "OSType": 18, + "Status": "OK", + "Caption": "Microsoft Windows Server 2019 Standard", + "CodeSet": "1252", + "Primary": true, + "Version": "10.0.17763", + "BuildType": "Multiprocessor Free", + "SuiteMask": 272, + "BootDevice": "\\Device\\HarddiskVolume4", + "CSDVersion": "", + "OSLanguage": 1033, + "PAEEnabled": false, + "BuildNumber": "17763", + "CountryCode": "1", + "Description": "", + "Distributed": false, + "InstallDate": "2020-02-21T12:32:21-08:00", + "ProductType": 3, + "SystemDrive": "C:", + "MUILanguages": [ + "en-US" + ], + "Manufacturer": "Microsoft Corporation", + "Organization": "", + "SerialNumber": "00429-80127-85875-AA456", + "SystemDevice": "\\Device\\HarddiskVolume6", + "LocalDateTime": "2020-11-26T00:15:02.743-08:00", + "NumberOfUsers": 1, + "PlusProductID": "", + "LastBootUpTime": "2020-11-12T08:09:38.56763-08:00", + "OSArchitecture": "64-bit", + "OSProductSuite": 272, + "RegisteredUser": "Windows User", + "CurrentTimeZone": -480, + "EncryptionLevel": 256, + "SystemDirectory": "C:\\Windows\\system32", + "WindowsDirectory": "C:\\Windows", + "CreationClassName": "Win32_OperatingSystem", + "FreeVirtualMemory": 124707648, + "NumberOfProcesses": 119, + "PlusVersionNumber": "", + "FreePhysicalMemory": 95233388, + "OperatingSystemSKU": 7, + "TotalSwapSpaceSize": 0, + "CSCreationClassName": "Win32_ComputerSystem", + "MaxNumberOfProcesses": 4294967295, + "MaxProcessMemorySize": 137438953344, + "OtherTypeDescription": "", + "NumberOfLicensedUsers": 0, + "FreeSpaceInPagingFiles": 29360128, + "TotalVirtualMemorySize": 230546044, + "TotalVisibleMemorySize": 201185916, + "ServicePackMajorVersion": 0, + "ServicePackMinorVersion": 0, + "SizeStoredInPagingFiles": 29360128, + "ForegroundApplicationBoost": 2 + } + ] + ], + "cpu": [ + [ + { + "Name": "Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz", + "Role": "CPU", + "Level": 6, + "Family": 179, + "Status": "OK", + "Caption": "Intel64 Family 6 Model 79 Stepping 1", + "Version": "", + "AssetTag": "UNKNOWN", + "DeviceID": "CPU0", + "ExtClock": 100, + "Revision": 20225, + "Stepping": "", + "UniqueId": "", + "CpuStatus": 1, + "DataWidth": 64, + "PartNumber": "", + "StatusInfo": 3, + "SystemName": "VNVMHOSTSRV4", + "Description": "Intel64 Family 6 Model 79 Stepping 1", + "InstallDate": "0001-01-01T00:00:00Z", + "L2CacheSize": 2048, + "L3CacheSize": 20480, + "PNPDeviceID": "", + "ProcessorId": "BFEBFBFF000406F1", + "ThreadCount": 16, + "VoltageCaps": 0, + "AddressWidth": 64, + "Architecture": 9, + "Availability": 3, + "ErrorCleared": false, + "L2CacheSpeed": 0, + "L3CacheSpeed": 0, + "Manufacturer": "GenuineIntel", + "SerialNumber": "", + "LastErrorCode": 0, + "MaxClockSpeed": 2098, + "NumberOfCores": 8, + "ProcessorType": 3, + "UpgradeMethod": 43, + "CurrentVoltage": 18, + "LoadPercentage": 1, + "Characteristics": 252, + "ErrorDescription": "", + "CreationClassName": "Win32_Processor", + "CurrentClockSpeed": 2098, + "SocketDesignation": "Proc 1", + "NumberOfEnabledCore": 8, + "ConfigManagerErrorCode": 0, + "OtherFamilyDescription": "", + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "VMMonitorModeExtensions": false, + "PowerManagementSupported": false, + "NumberOfLogicalProcessors": 16, + "VirtualizationFirmwareEnabled": false, + "SecondLevelAddressTranslationExtensions": false + } + ], + [ + { + "Name": "Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz", + "Role": "CPU", + "Level": 6, + "Family": 179, + "Status": "OK", + "Caption": "Intel64 Family 6 Model 79 Stepping 1", + "Version": "", + "AssetTag": "UNKNOWN", + "DeviceID": "CPU1", + "ExtClock": 100, + "Revision": 20225, + "Stepping": "", + "UniqueId": "", + "CpuStatus": 1, + "DataWidth": 64, + "PartNumber": "", + "StatusInfo": 3, + "SystemName": "VNVMHOSTSRV4", + "Description": "Intel64 Family 6 Model 79 Stepping 1", + "InstallDate": "0001-01-01T00:00:00Z", + "L2CacheSize": 2048, + "L3CacheSize": 20480, + "PNPDeviceID": "", + "ProcessorId": "BFEBFBFF000406F1", + "ThreadCount": 16, + "VoltageCaps": 0, + "AddressWidth": 64, + "Architecture": 9, + "Availability": 3, + "ErrorCleared": false, + "L2CacheSpeed": 0, + "L3CacheSpeed": 0, + "Manufacturer": "GenuineIntel", + "SerialNumber": "", + "LastErrorCode": 0, + "MaxClockSpeed": 2098, + "NumberOfCores": 8, + "ProcessorType": 3, + "UpgradeMethod": 43, + "CurrentVoltage": 18, + "LoadPercentage": 0, + "Characteristics": 252, + "ErrorDescription": "", + "CreationClassName": "Win32_Processor", + "CurrentClockSpeed": 2098, + "SocketDesignation": "Proc 2", + "NumberOfEnabledCore": 8, + "ConfigManagerErrorCode": 0, + "OtherFamilyDescription": "", + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "VMMonitorModeExtensions": false, + "PowerManagementSupported": false, + "NumberOfLogicalProcessors": 16, + "VirtualizationFirmwareEnabled": false, + "SecondLevelAddressTranslationExtensions": false + } + ] + ], + "mem": [ + [ + { + "SKU": "", + "Tag": "Physical Memory 0", + "Name": "Physical Memory", + "Model": "", + "Speed": 2400, + "Status": "", + "Caption": "Physical Memory", + "Version": "", + "Capacity": 17179869184, + "BankLabel": "", + "DataWidth": 64, + "PoweredOn": false, + "Removable": false, + "Attributes": 1, + "FormFactor": 8, + "MaxVoltage": 1200, + "MemoryType": 0, + "MinVoltage": 1200, + "PartNumber": "809082-091", + "TotalWidth": 72, + "TypeDetail": 8320, + "Description": "Physical Memory", + "InstallDate": "0001-01-01T00:00:00Z", + "Replaceable": false, + "HotSwappable": false, + "Manufacturer": "HP ", + "SerialNumber": "", + "DeviceLocator": "PROC 1 DIMM 1", + "PositionInRow": 0, + "SMBIOSMemoryType": 26, + "ConfiguredVoltage": 1200, + "CreationClassName": "Win32_PhysicalMemory", + "InterleavePosition": 0, + "InterleaveDataDepth": 0, + "ConfiguredClockSpeed": 2133, + "OtherIdentifyingInfo": "" + } + ], + [ + { + "SKU": "", + "Tag": "Physical Memory 3", + "Name": "Physical Memory", + "Model": "", + "Speed": 2400, + "Status": "", + "Caption": "Physical Memory", + "Version": "", + "Capacity": 17179869184, + "BankLabel": "", + "DataWidth": 64, + "PoweredOn": false, + "Removable": false, + "Attributes": 1, + "FormFactor": 8, + "MaxVoltage": 1200, + "MemoryType": 0, + "MinVoltage": 1200, + "PartNumber": "809082-091", + "TotalWidth": 72, + "TypeDetail": 8320, + "Description": "Physical Memory", + "InstallDate": "0001-01-01T00:00:00Z", + "Replaceable": false, + "HotSwappable": false, + "Manufacturer": "HP ", + "SerialNumber": "", + "DeviceLocator": "PROC 1 DIMM 4", + "PositionInRow": 0, + "SMBIOSMemoryType": 26, + "ConfiguredVoltage": 1200, + "CreationClassName": "Win32_PhysicalMemory", + "InterleavePosition": 0, + "InterleaveDataDepth": 0, + "ConfiguredClockSpeed": 2133, + "OtherIdentifyingInfo": "" + } + ], + [ + { + "SKU": "", + "Tag": "Physical Memory 8", + "Name": "Physical Memory", + "Model": "", + "Speed": 2400, + "Status": "", + "Caption": "Physical Memory", + "Version": "", + "Capacity": 17179869184, + "BankLabel": "", + "DataWidth": 64, + "PoweredOn": false, + "Removable": false, + "Attributes": 1, + "FormFactor": 8, + "MaxVoltage": 1200, + "MemoryType": 0, + "MinVoltage": 1200, + "PartNumber": "809082-091", + "TotalWidth": 72, + "TypeDetail": 8320, + "Description": "Physical Memory", + "InstallDate": "0001-01-01T00:00:00Z", + "Replaceable": false, + "HotSwappable": false, + "Manufacturer": "HP ", + "SerialNumber": "", + "DeviceLocator": "PROC 1 DIMM 9", + "PositionInRow": 0, + "SMBIOSMemoryType": 26, + "ConfiguredVoltage": 1200, + "CreationClassName": "Win32_PhysicalMemory", + "InterleavePosition": 0, + "InterleaveDataDepth": 0, + "ConfiguredClockSpeed": 2133, + "OtherIdentifyingInfo": "" + } + ], + [ + { + "SKU": "", + "Tag": "Physical Memory 11", + "Name": "Physical Memory", + "Model": "", + "Speed": 2400, + "Status": "", + "Caption": "Physical Memory", + "Version": "", + "Capacity": 17179869184, + "BankLabel": "", + "DataWidth": 64, + "PoweredOn": false, + "Removable": false, + "Attributes": 1, + "FormFactor": 8, + "MaxVoltage": 1200, + "MemoryType": 0, + "MinVoltage": 1200, + "PartNumber": "809082-091", + "TotalWidth": 72, + "TypeDetail": 8320, + "Description": "Physical Memory", + "InstallDate": "0001-01-01T00:00:00Z", + "Replaceable": false, + "HotSwappable": false, + "Manufacturer": "HP ", + "SerialNumber": "", + "DeviceLocator": "PROC 1 DIMM 12", + "PositionInRow": 0, + "SMBIOSMemoryType": 26, + "ConfiguredVoltage": 1200, + "CreationClassName": "Win32_PhysicalMemory", + "InterleavePosition": 0, + "InterleaveDataDepth": 0, + "ConfiguredClockSpeed": 2133, + "OtherIdentifyingInfo": "" + } + ], + [ + { + "SKU": "", + "Tag": "Physical Memory 12", + "Name": "Physical Memory", + "Model": "", + "Speed": 2600, + "Status": "", + "Caption": "Physical Memory", + "Version": "", + "Capacity": 34359738368, + "BankLabel": "", + "DataWidth": 64, + "PoweredOn": false, + "Removable": false, + "Attributes": 2, + "FormFactor": 8, + "MaxVoltage": 1200, + "MemoryType": 0, + "MinVoltage": 1200, + "PartNumber": "NOT AVAILABLE", + "TotalWidth": 72, + "TypeDetail": 8320, + "Description": "Physical Memory", + "InstallDate": "0001-01-01T00:00:00Z", + "Replaceable": false, + "HotSwappable": false, + "Manufacturer": "UNKNOWN", + "SerialNumber": "", + "DeviceLocator": "PROC 2 DIMM 1", + "PositionInRow": 0, + "SMBIOSMemoryType": 26, + "ConfiguredVoltage": 1200, + "CreationClassName": "Win32_PhysicalMemory", + "InterleavePosition": 0, + "InterleaveDataDepth": 0, + "ConfiguredClockSpeed": 2133, + "OtherIdentifyingInfo": "" + } + ], + [ + { + "SKU": "", + "Tag": "Physical Memory 15", + "Name": "Physical Memory", + "Model": "", + "Speed": 2600, + "Status": "", + "Caption": "Physical Memory", + "Version": "", + "Capacity": 34359738368, + "BankLabel": "", + "DataWidth": 64, + "PoweredOn": false, + "Removable": false, + "Attributes": 2, + "FormFactor": 8, + "MaxVoltage": 1200, + "MemoryType": 0, + "MinVoltage": 1200, + "PartNumber": "NOT AVAILABLE", + "TotalWidth": 72, + "TypeDetail": 8320, + "Description": "Physical Memory", + "InstallDate": "0001-01-01T00:00:00Z", + "Replaceable": false, + "HotSwappable": false, + "Manufacturer": "UNKNOWN", + "SerialNumber": "", + "DeviceLocator": "PROC 2 DIMM 4", + "PositionInRow": 0, + "SMBIOSMemoryType": 26, + "ConfiguredVoltage": 1200, + "CreationClassName": "Win32_PhysicalMemory", + "InterleavePosition": 0, + "InterleaveDataDepth": 0, + "ConfiguredClockSpeed": 2133, + "OtherIdentifyingInfo": "" + } + ], + [ + { + "SKU": "", + "Tag": "Physical Memory 20", + "Name": "Physical Memory", + "Model": "", + "Speed": 2600, + "Status": "", + "Caption": "Physical Memory", + "Version": "", + "Capacity": 34359738368, + "BankLabel": "", + "DataWidth": 64, + "PoweredOn": false, + "Removable": false, + "Attributes": 2, + "FormFactor": 8, + "MaxVoltage": 1200, + "MemoryType": 0, + "MinVoltage": 1200, + "PartNumber": "NOT AVAILABLE", + "TotalWidth": 72, + "TypeDetail": 8320, + "Description": "Physical Memory", + "InstallDate": "0001-01-01T00:00:00Z", + "Replaceable": false, + "HotSwappable": false, + "Manufacturer": "UNKNOWN", + "SerialNumber": "", + "DeviceLocator": "PROC 2 DIMM 9", + "PositionInRow": 0, + "SMBIOSMemoryType": 26, + "ConfiguredVoltage": 1200, + "CreationClassName": "Win32_PhysicalMemory", + "InterleavePosition": 0, + "InterleaveDataDepth": 0, + "ConfiguredClockSpeed": 2133, + "OtherIdentifyingInfo": "" + } + ], + [ + { + "SKU": "", + "Tag": "Physical Memory 23", + "Name": "Physical Memory", + "Model": "", + "Speed": 2600, + "Status": "", + "Caption": "Physical Memory", + "Version": "", + "Capacity": 34359738368, + "BankLabel": "", + "DataWidth": 64, + "PoweredOn": false, + "Removable": false, + "Attributes": 2, + "FormFactor": 8, + "MaxVoltage": 1200, + "MemoryType": 0, + "MinVoltage": 1200, + "PartNumber": "NOT AVAILABLE", + "TotalWidth": 72, + "TypeDetail": 8320, + "Description": "Physical Memory", + "InstallDate": "0001-01-01T00:00:00Z", + "Replaceable": false, + "HotSwappable": false, + "Manufacturer": "UNKNOWN", + "SerialNumber": "", + "DeviceLocator": "PROC 2 DIMM 12", + "PositionInRow": 0, + "SMBIOSMemoryType": 26, + "ConfiguredVoltage": 1200, + "CreationClassName": "Win32_PhysicalMemory", + "InterleavePosition": 0, + "InterleaveDataDepth": 0, + "ConfiguredClockSpeed": 2133, + "OtherIdentifyingInfo": "" + } + ] + ], + "usb": [ + [ + { + "Name": "Standard Universal PCI to USB Host Controller", + "Status": "OK", + "Caption": "Standard Universal PCI to USB Host Controller", + "DeviceID": "PCI\\VEN_103C&DEV_3300&SUBSYS_3381103C&REV_03\\4&2383FE5D&0&04E2", + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "Description": "Standard Universal PCI to USB Host Controller", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_103C&DEV_3300&SUBSYS_3381103C&REV_03\\4&2383FE5D&0&04E2", + "Availability": 0, + "ErrorCleared": false, + "Manufacturer": "(Standard USB Host Controller)", + "LastErrorCode": 0, + "TimeOfLastReset": "0001-01-01T00:00:00Z", + "ErrorDescription": "", + "CreationClassName": "Win32_USBController", + "ProtocolSupported": 16, + "MaxNumberControlled": 0, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "Name": "Standard Enhanced PCI to USB Host Controller", + "Status": "OK", + "Caption": "Standard Enhanced PCI to USB Host Controller", + "DeviceID": "PCI\\VEN_8086&DEV_8D2D&SUBSYS_8030103C&REV_05\\3&11583659&0&D0", + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "Description": "Standard Enhanced PCI to USB Host Controller", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_8086&DEV_8D2D&SUBSYS_8030103C&REV_05\\3&11583659&0&D0", + "Availability": 0, + "ErrorCleared": false, + "Manufacturer": "(Standard USB Host Controller)", + "LastErrorCode": 0, + "TimeOfLastReset": "0001-01-01T00:00:00Z", + "ErrorDescription": "", + "CreationClassName": "Win32_USBController", + "ProtocolSupported": 16, + "MaxNumberControlled": 0, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "Name": "Standard Enhanced PCI to USB Host Controller", + "Status": "OK", + "Caption": "Standard Enhanced PCI to USB Host Controller", + "DeviceID": "PCI\\VEN_8086&DEV_8D26&SUBSYS_8030103C&REV_05\\3&11583659&0&E8", + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "Description": "Standard Enhanced PCI to USB Host Controller", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_8086&DEV_8D26&SUBSYS_8030103C&REV_05\\3&11583659&0&E8", + "Availability": 0, + "ErrorCleared": false, + "Manufacturer": "(Standard USB Host Controller)", + "LastErrorCode": 0, + "TimeOfLastReset": "0001-01-01T00:00:00Z", + "ErrorDescription": "", + "CreationClassName": "Win32_USBController", + "ProtocolSupported": 16, + "MaxNumberControlled": 0, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "Name": "Intel(R) USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)", + "Status": "OK", + "Caption": "Intel(R) USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)", + "DeviceID": "PCI\\VEN_8086&DEV_8D31&SUBSYS_8030103C&REV_05\\3&11583659&0&A0", + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "Description": "USB xHCI Compliant Host Controller", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_8086&DEV_8D31&SUBSYS_8030103C&REV_05\\3&11583659&0&A0", + "Availability": 0, + "ErrorCleared": false, + "Manufacturer": "Generic USB xHCI Host Controller", + "LastErrorCode": 0, + "TimeOfLastReset": "0001-01-01T00:00:00Z", + "ErrorDescription": "", + "CreationClassName": "Win32_USBController", + "ProtocolSupported": 16, + "MaxNumberControlled": 0, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ] + ], + "bios": [ + [ + { + "Name": "P89", + "Status": "OK", + "Caption": "P89", + "CodeSet": "", + "Version": "HP - 1", + "BIOSVersion": [ + "HP - 1", + "P89", + "HP - 21E00" + ], + "BuildNumber": "", + "Description": "P89", + "InstallDate": "0001-01-01T00:00:00Z", + "PrimaryBIOS": true, + "ReleaseDate": "2016-09-13T00:00:00Z", + "Manufacturer": "HP", + "SerialNumber": "ABCD123456", + "OtherTargetOS": "", + "SMBIOSPresent": true, + "CurrentLanguage": "", + "LanguageEdition": "", + "ListOfLanguages": null, + "SMBIOSBIOSVersion": "P89", + "SoftwareElementID": "P89", + "IdentificationCode": "", + "SMBIOSMajorVersion": 2, + "SMBIOSMinorVersion": 8, + "InstallableLanguages": 0, + "SoftwareElementState": 3, + "TargetOperatingSystem": 0, + "SystemBiosMajorVersion": 2, + "SystemBiosMinorVersion": 30, + "EmbeddedControllerMajorVersion": 2, + "EmbeddedControllerMinorVersion": 50 + } + ] + ], + "disk": [ + [ + { + "Name": "\\\\.\\PHYSICALDRIVE5", + "Size": 3962100925440, + "Index": 5, + "Model": "Microsoft Storage Space Device", + "Status": "OK", + "Caption": "Microsoft Storage Space Device", + "SCSIBus": 0, + "DeviceID": "\\\\.\\PHYSICALDRIVE5", + "SCSIPort": 0, + "MediaType": "Fixed hard disk media", + "Signature": 0, + "Partitions": 1, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "TotalHeads": 255, + "Description": "Disk drive", + "InstallDate": "0001-01-01T00:00:00Z", + "MediaLoaded": true, + "PNPDeviceID": "STORAGE\\DISK\\{C905ECA4-6609-4829-8510-DB4D3AFD36E6}", + "TotalTracks": 122832990, + "Availability": 0, + "ErrorCleared": false, + "Manufacturer": "(Standard disk drives)", + "MaxBlockSize": 0, + "MaxMediaSize": 0, + "MinBlockSize": 0, + "SCSITargetId": 0, + "SerialNumber": "{c905eca4-6609-4829-8510-db4d3afd36e6}", + "TotalSectors": 7738478370, + "InterfaceType": "SCSI", + "LastErrorCode": 0, + "NeedsCleaning": false, + "BytesPerSector": 512, + "TotalCylinders": 481698, + "SCSILogicalUnit": 1, + "SectorsPerTrack": 63, + "DefaultBlockSize": 0, + "ErrorDescription": "", + "ErrorMethodology": "", + "FirmwareRevision": "0.1", + "CompressionMethod": "", + "CreationClassName": "Win32_DiskDrive", + "TracksPerCylinder": 255, + "CapabilityDescriptions": [ + "Random Access", + "Supports Writing" + ], + "ConfigManagerErrorCode": 0, + "NumberOfMediaSupported": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "Name": "\\\\.\\PHYSICALDRIVE3", + "Size": 500105249280, + "Index": 3, + "Model": "ATA CT500MX500SSD1 SCSI Disk Device", + "Status": "OK", + "Caption": "ATA CT500MX500SSD1 SCSI Disk Device", + "SCSIBus": 0, + "DeviceID": "\\\\.\\PHYSICALDRIVE3", + "SCSIPort": 0, + "MediaType": "Fixed hard disk media", + "Signature": 0, + "Partitions": 0, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "TotalHeads": 255, + "Description": "Disk drive", + "InstallDate": "0001-01-01T00:00:00Z", + "MediaLoaded": true, + "PNPDeviceID": "SCSI\\DISK&VEN_ATA&PROD_CT500MX500SSD1\\5&2F1553C3&0&000700", + "TotalTracks": 15504255, + "Availability": 0, + "ErrorCleared": false, + "Manufacturer": "(Standard disk drives)", + "MaxBlockSize": 0, + "MaxMediaSize": 0, + "MinBlockSize": 0, + "SCSITargetId": 7, + "SerialNumber": "1922E2071D37 ", + "TotalSectors": 976768065, + "InterfaceType": "SCSI", + "LastErrorCode": 0, + "NeedsCleaning": false, + "BytesPerSector": 512, + "TotalCylinders": 60801, + "SCSILogicalUnit": 0, + "SectorsPerTrack": 63, + "DefaultBlockSize": 0, + "ErrorDescription": "", + "ErrorMethodology": "", + "FirmwareRevision": "023 ", + "CompressionMethod": "", + "CreationClassName": "Win32_DiskDrive", + "TracksPerCylinder": 255, + "CapabilityDescriptions": [ + "Random Access", + "Supports Writing" + ], + "ConfigManagerErrorCode": 0, + "NumberOfMediaSupported": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "Name": "\\\\.\\PHYSICALDRIVE2", + "Size": 500105249280, + "Index": 2, + "Model": "ATA Crucial_CT500MX2 SCSI Disk Device", + "Status": "OK", + "Caption": "ATA Crucial_CT500MX2 SCSI Disk Device", + "SCSIBus": 0, + "DeviceID": "\\\\.\\PHYSICALDRIVE2", + "SCSIPort": 0, + "MediaType": "Fixed hard disk media", + "Signature": 0, + "Partitions": 3, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "TotalHeads": 255, + "Description": "Disk drive", + "InstallDate": "0001-01-01T00:00:00Z", + "MediaLoaded": true, + "PNPDeviceID": "SCSI\\DISK&VEN_ATA&PROD_CRUCIAL_CT500MX2\\5&2F1553C3&0&000600", + "TotalTracks": 15504255, + "Availability": 0, + "ErrorCleared": false, + "Manufacturer": "(Standard disk drives)", + "MaxBlockSize": 0, + "MaxMediaSize": 0, + "MinBlockSize": 0, + "SCSITargetId": 6, + "SerialNumber": " 153810985FA4", + "TotalSectors": 976768065, + "InterfaceType": "SCSI", + "LastErrorCode": 0, + "NeedsCleaning": false, + "BytesPerSector": 512, + "TotalCylinders": 60801, + "SCSILogicalUnit": 0, + "SectorsPerTrack": 63, + "DefaultBlockSize": 0, + "ErrorDescription": "", + "ErrorMethodology": "", + "FirmwareRevision": "MU02", + "CompressionMethod": "", + "CreationClassName": "Win32_DiskDrive", + "TracksPerCylinder": 255, + "CapabilityDescriptions": [ + "Random Access", + "Supports Writing" + ], + "ConfigManagerErrorCode": 0, + "NumberOfMediaSupported": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ] + ], + "comp_sys": [ + [ + { + "Name": "VNVMHOSTSRV4", + "Model": "ProLiant DL380 Gen9", + "Roles": [ + "LM_Workstation", + "LM_Server", + "NT", + "Server_NT" + ], + "Domain": "WORKGROUP", + "Status": "OK", + "Caption": "VNVMHOSTSRV4", + "UserName": "", + "Workgroup": "WORKGROUP", + "DomainRole": 2, + "NameFormat": "", + "PowerState": 0, + "ResetCount": -1, + "ResetLimit": -1, + "SystemType": "x64-based PC", + "WakeUpType": 6, + "BootupState": "Normal boot", + "DNSHostName": "VNVMHOSTSRV4", + "Description": "AT/AT COMPATIBLE", + "InstallDate": "0001-01-01T00:00:00Z", + "Manufacturer": "HP", + "PCSystemType": 4, + "PartOfDomain": false, + "SystemFamily": "ProLiant", + "ThermalState": 3, + "OEMStringArray": [ + "PSF: ", + "Product ID: 859084-S01", + "OEM String: " + ], + "PCSystemTypeEx": 4, + "CurrentTimeZone": -480, + "PauseAfterReset": -1, + "ResetCapability": 1, + "SystemSKUNumber": "859084-S01", + "BootROMSupported": true, + "ChassisSKUNumber": "", + "DaylightInEffect": false, + "PowerSupplyState": 3, + "PrimaryOwnerName": "Windows User", + "BootOptionOnLimit": 0, + "CreationClassName": "Win32_ComputerSystem", + "HypervisorPresent": true, + "InfraredSupported": false, + "ChassisBootupState": 3, + "NumberOfProcessors": 2, + "AdminPasswordStatus": 3, + "PrimaryOwnerContact": "", + "TotalPhysicalMemory": 206014377984, + "BootOptionOnWatchDog": 0, + "FrontPanelResetStatus": 3, + "PowerOnPasswordStatus": 3, + "KeyboardPasswordStatus": 3, + "AutomaticManagedPagefile": true, + "AutomaticResetBootOption": true, + "AutomaticResetCapability": true, + "NetworkServerModeEnabled": true, + "PowerManagementSupported": false, + "EnableDaylightSavingsTime": true, + "NumberOfLogicalProcessors": 32, + "SupportContactDescription": null + } + ] + ], + "base_board": [ + [ + { + "SKU": "", + "Tag": "Base Board", + "Name": "Base Board", + "Depth": 0, + "Model": "", + "Width": 0, + "Height": 0, + "Status": "OK", + "Weight": 0, + "Caption": "Base Board", + "Product": "ProLiant DL380 Gen9", + "Version": "", + "PoweredOn": true, + "Removable": true, + "PartNumber": "", + "SlotLayout": "", + "Description": "Base Board", + "InstallDate": "0001-01-01T00:00:00Z", + "Replaceable": true, + "HostingBoard": true, + "HotSwappable": false, + "Manufacturer": "HP", + "SerialNumber": "ABCD123456", + "ConfigOptions": null, + "CreationClassName": "Win32_BaseBoard", + "SpecialRequirements": false, + "OtherIdentifyingInfo": "", + "RequiresDaughterBoard": false, + "RequirementsDescription": "" + } + ] + ], + "comp_sys_prod": [ + [ + { + "Name": "ProLiant DL380 Gen9", + "UUID": "30393538-3438-584D-5136-353130325031", + "Vendor": "HP", + "Caption": "Computer System Product", + "Version": "", + "SKUNumber": "", + "Description": "Computer System Product", + "IdentifyingNumber": "ABCD123456" + } + ] + ], + "network_config": [ + [ + { + "MTU": 0, + "Index": 0, + "Caption": "[00000000] Microsoft Kernel Debug Network Adapter", + "IPSubnet": null, + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": null, + "IPEnabled": false, + "SettingID": "{C8813F21-FC58-4EF5-B6DE-F10DF9AFF459}", + "DHCPServer": "", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "", + "DHCPEnabled": true, + "DNSHostName": "", + "Description": "Microsoft Kernel Debug Network Adapter", + "ServiceName": "kdnic", + "WINSScopeID": "", + "DatabasePath": "", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 14, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "0001-01-01T00:00:00Z", + "DefaultIPGateway": null, + "DHCPLeaseObtained": "0001-01-01T00:00:00Z", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 0, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": null, + "IPSecPermitUDPPorts": null, + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": null, + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": null, + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": false, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": null, + "FullDNSRegistrationEnabled": false, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 1, + "Caption": "[00000001] Broadcom NetXtreme Gigabit Ethernet", + "IPSubnet": null, + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": null, + "IPEnabled": false, + "SettingID": "{07BCD0FA-68CB-43DA-A95C-9F5761C070E4}", + "DHCPServer": "", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "3C:A8:2A:E6:27:C9", + "DHCPEnabled": true, + "DNSHostName": "", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "WINSScopeID": "", + "DatabasePath": "", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 3, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "0001-01-01T00:00:00Z", + "DefaultIPGateway": null, + "DHCPLeaseObtained": "0001-01-01T00:00:00Z", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 0, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": null, + "IPSecPermitUDPPorts": null, + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": null, + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": null, + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": false, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": null, + "FullDNSRegistrationEnabled": false, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 2, + "Caption": "[00000002] Broadcom NetXtreme Gigabit Ethernet", + "IPSubnet": null, + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": null, + "IPEnabled": false, + "SettingID": "{EB82D1C8-1AE1-436F-92C9-CAAC93E72E95}", + "DHCPServer": "", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "94:18:82:6E:16:2C", + "DHCPEnabled": true, + "DNSHostName": "", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "WINSScopeID": "", + "DatabasePath": "", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 17, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "0001-01-01T00:00:00Z", + "DefaultIPGateway": null, + "DHCPLeaseObtained": "0001-01-01T00:00:00Z", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 0, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": null, + "IPSecPermitUDPPorts": null, + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": null, + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": null, + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": false, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": null, + "FullDNSRegistrationEnabled": false, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 3, + "Caption": "[00000003] Broadcom NetXtreme Gigabit Ethernet", + "IPSubnet": null, + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": null, + "IPEnabled": false, + "SettingID": "{77E8A4E5-31CE-4618-A6A8-084310C616E2}", + "DHCPServer": "", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "3C:A8:2A:E6:27:CA", + "DHCPEnabled": true, + "DNSHostName": "", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "WINSScopeID": "", + "DatabasePath": "", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 10, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "0001-01-01T00:00:00Z", + "DefaultIPGateway": null, + "DHCPLeaseObtained": "0001-01-01T00:00:00Z", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 0, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": null, + "IPSecPermitUDPPorts": null, + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": null, + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": null, + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": false, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": null, + "FullDNSRegistrationEnabled": false, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 4, + "Caption": "[00000004] Broadcom NetXtreme Gigabit Ethernet", + "IPSubnet": [ + "255.255.240.0", + "64" + ], + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": [ + "172.17.9.121", + "fe80::45d7:5980:c39a:b6b2" + ], + "IPEnabled": true, + "SettingID": "{7128A11A-718E-430E-98C7-99DE8AE13020}", + "DHCPServer": "172.17.0.1", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "3C:A8:2A:E6:27:C8", + "DHCPEnabled": true, + "DNSHostName": "VNVMHOSTSRV4", + "Description": "Broadcom NetXtreme Gigabit Ethernet #4", + "ServiceName": "b57nd60a", + "WINSScopeID": "", + "DatabasePath": "%SystemRoot%\\System32\\drivers\\etc", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 8, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "2020-11-26T20:09:51-08:00", + "DefaultIPGateway": [ + "172.17.0.1" + ], + "DHCPLeaseObtained": "2020-11-25T20:09:51-08:00", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 25, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": [], + "IPSecPermitUDPPorts": [], + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": [ + "172.17.4.11", + "172.17.4.22", + "172.17.4.86" + ], + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": [], + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": true, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": [], + "FullDNSRegistrationEnabled": true, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 5, + "Caption": "[00000005] Broadcom NetXtreme Gigabit Ethernet", + "IPSubnet": null, + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": null, + "IPEnabled": false, + "SettingID": "{1A157B66-2890-4416-B43F-883CD05B8B0B}", + "DHCPServer": "", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "94:18:82:6E:16:2D", + "DHCPEnabled": true, + "DNSHostName": "", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "WINSScopeID": "", + "DatabasePath": "", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 4, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "0001-01-01T00:00:00Z", + "DefaultIPGateway": null, + "DHCPLeaseObtained": "0001-01-01T00:00:00Z", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 0, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": null, + "IPSecPermitUDPPorts": null, + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": null, + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": null, + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": false, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": null, + "FullDNSRegistrationEnabled": false, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 6, + "Caption": "[00000006] Broadcom NetXtreme Gigabit Ethernet", + "IPSubnet": null, + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": null, + "IPEnabled": false, + "SettingID": "{C2DD58DC-8153-4492-8A4A-A3C6804BF2D7}", + "DHCPServer": "", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "3C:A8:2A:E6:27:CB", + "DHCPEnabled": true, + "DNSHostName": "", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "WINSScopeID": "", + "DatabasePath": "", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 13, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "0001-01-01T00:00:00Z", + "DefaultIPGateway": null, + "DHCPLeaseObtained": "0001-01-01T00:00:00Z", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 0, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": null, + "IPSecPermitUDPPorts": null, + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": null, + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": null, + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": false, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": null, + "FullDNSRegistrationEnabled": false, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 7, + "Caption": "[00000007] Broadcom NetXtreme Gigabit Ethernet", + "IPSubnet": null, + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": null, + "IPEnabled": false, + "SettingID": "{D670A8E4-1D5B-4E7C-90EF-7B95ED0F9A1B}", + "DHCPServer": "", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "94:18:82:6E:16:2E", + "DHCPEnabled": true, + "DNSHostName": "", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "WINSScopeID": "", + "DatabasePath": "", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 15, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "0001-01-01T00:00:00Z", + "DefaultIPGateway": null, + "DHCPLeaseObtained": "0001-01-01T00:00:00Z", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 0, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": null, + "IPSecPermitUDPPorts": null, + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": null, + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": null, + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": false, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": null, + "FullDNSRegistrationEnabled": false, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 8, + "Caption": "[00000008] Broadcom NetXtreme Gigabit Ethernet", + "IPSubnet": null, + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": null, + "IPEnabled": false, + "SettingID": "{3E4991C7-0C2C-42BB-A40F-133AAD11FB34}", + "DHCPServer": "", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "94:18:82:6E:16:2F", + "DHCPEnabled": true, + "DNSHostName": "", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "WINSScopeID": "", + "DatabasePath": "", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 6, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "0001-01-01T00:00:00Z", + "DefaultIPGateway": null, + "DHCPLeaseObtained": "0001-01-01T00:00:00Z", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 0, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": null, + "IPSecPermitUDPPorts": null, + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": null, + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": null, + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": false, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": null, + "FullDNSRegistrationEnabled": false, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 9, + "Caption": "[00000009] Hyper-V Virtual Switch Extension Adapter", + "IPSubnet": null, + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": null, + "IPEnabled": false, + "SettingID": "{DA1BE60D-9764-4A53-A05A-BAFD7D6D8622}", + "DHCPServer": "", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "", + "DHCPEnabled": false, + "DNSHostName": "", + "Description": "Hyper-V Virtual Switch Extension Adapter", + "ServiceName": "VMSMP", + "WINSScopeID": "", + "DatabasePath": "", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 16, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "0001-01-01T00:00:00Z", + "DefaultIPGateway": null, + "DHCPLeaseObtained": "0001-01-01T00:00:00Z", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 0, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": null, + "IPSecPermitUDPPorts": null, + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": null, + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": null, + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": false, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": null, + "FullDNSRegistrationEnabled": false, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 10, + "Caption": "[00000010] Hyper-V Virtual Ethernet Adapter", + "IPSubnet": [ + "255.255.240.0", + "64" + ], + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": [ + "172.17.9.6", + "fe80::6017:bb9f:9609:aa1" + ], + "IPEnabled": true, + "SettingID": "{76543B78-0150-491F-9CF7-5195A55FFDD5}", + "DHCPServer": "172.17.0.1", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "94:18:82:6E:16:2D", + "DHCPEnabled": true, + "DNSHostName": "VNVMHOSTSRV4", + "Description": "Hyper-V Virtual Ethernet Adapter", + "ServiceName": "VMSNPXYMP", + "WINSScopeID": "", + "DatabasePath": "%SystemRoot%\\System32\\drivers\\etc", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 9, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "2020-11-26T20:09:55-08:00", + "DefaultIPGateway": [ + "172.17.0.1" + ], + "DHCPLeaseObtained": "2020-11-25T20:09:55-08:00", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 25, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": [], + "IPSecPermitUDPPorts": [], + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": [ + "8.8.8.8", + "208.67.222.222" + ], + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": [], + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": true, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": [], + "FullDNSRegistrationEnabled": true, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 11, + "Caption": "[00000011] Hyper-V Virtual Switch Extension Adapter", + "IPSubnet": null, + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": null, + "IPEnabled": false, + "SettingID": "{78CB2FB1-3139-40D7-A3F2-63B3A63943D6}", + "DHCPServer": "", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "", + "DHCPEnabled": false, + "DNSHostName": "", + "Description": "Hyper-V Virtual Switch Extension Adapter", + "ServiceName": "VMSMP", + "WINSScopeID": "", + "DatabasePath": "", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 11, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "0001-01-01T00:00:00Z", + "DefaultIPGateway": null, + "DHCPLeaseObtained": "0001-01-01T00:00:00Z", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 0, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": null, + "IPSecPermitUDPPorts": null, + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": null, + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": null, + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": false, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": null, + "FullDNSRegistrationEnabled": false, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ], + [ + { + "MTU": 0, + "Index": 12, + "Caption": "[00000012] Hyper-V Virtual Ethernet Adapter", + "IPSubnet": [ + "255.255.240.0", + "64" + ], + "DNSDomain": "", + "IGMPLevel": 0, + "IPAddress": [ + "172.17.9.122", + "fe80::f8a1:3a0c:e2c7:d174" + ], + "IPEnabled": true, + "SettingID": "{549B2925-331C-4865-9148-8D5AFCB1B054}", + "DHCPServer": "172.17.0.1", + "DefaultTOS": 0, + "DefaultTTL": 0, + "MACAddress": "94:18:82:6E:16:2C", + "DHCPEnabled": true, + "DNSHostName": "VNVMHOSTSRV4", + "Description": "Hyper-V Virtual Ethernet Adapter #2", + "ServiceName": "VMSNPXYMP", + "WINSScopeID": "", + "DatabasePath": "%SystemRoot%\\System32\\drivers\\etc", + "KeepAliveTime": 0, + "TcpWindowSize": 0, + "InterfaceIndex": 7, + "ArpUseEtherSNAP": false, + "DHCPLeaseExpires": "2020-11-26T20:09:55-08:00", + "DefaultIPGateway": [ + "172.17.0.1" + ], + "DHCPLeaseObtained": "2020-11-25T20:09:55-08:00", + "KeepAliveInterval": 0, + "NumForwardPackets": 0, + "TcpNumConnections": 0, + "WINSPrimaryServer": "", + "IPConnectionMetric": 25, + "IPUseZeroBroadcast": false, + "WINSHostLookupFile": "", + "DeadGWDetectEnabled": false, + "ForwardBufferMemory": 0, + "IPSecPermitTCPPorts": [], + "IPSecPermitUDPPorts": [], + "PMTUBHDetectEnabled": false, + "TcpipNetbiosOptions": 0, + "WINSSecondaryServer": "", + "ArpAlwaysSourceRoute": false, + "DNSServerSearchOrder": [ + "8.8.8.8", + "208.67.222.222" + ], + "PMTUDiscoveryEnabled": false, + "IPSecPermitIPProtocols": [], + "IPFilterSecurityEnabled": false, + "WINSEnableLMHostsLookup": true, + "TcpMaxDataRetransmissions": 0, + "DNSDomainSuffixSearchOrder": [], + "FullDNSRegistrationEnabled": true, + "TcpUseRFC1122UrgentPointer": false, + "DNSEnabledForWINSResolution": false, + "DomainDNSRegistrationEnabled": false, + "TcpMaxConnectRetransmissions": 0 + } + ] + ], + "desktop_monitor": [ + [ + { + "Name": "Default Monitor", + "Status": "OK", + "Caption": "Default Monitor", + "DeviceID": "DesktopMonitor1", + "IsLocked": false, + "Bandwidth": 0, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "Description": "Default Monitor", + "DisplayType": 0, + "InstallDate": "0001-01-01T00:00:00Z", + "MonitorType": "Default Monitor", + "PNPDeviceID": "", + "ScreenWidth": 0, + "Availability": 8, + "ErrorCleared": false, + "ScreenHeight": 0, + "LastErrorCode": 0, + "ErrorDescription": "", + "CreationClassName": "Win32_DesktopMonitor", + "MonitorManufacturer": "", + "PixelsPerXLogicalInch": 96, + "PixelsPerYLogicalInch": 96, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "Name": "Generic PnP Monitor", + "Status": "OK", + "Caption": "Generic PnP Monitor", + "DeviceID": "DesktopMonitor2", + "IsLocked": false, + "Bandwidth": 0, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "Description": "Generic PnP Monitor", + "DisplayType": 0, + "InstallDate": "0001-01-01T00:00:00Z", + "MonitorType": "Generic PnP Monitor", + "PNPDeviceID": "DISPLAY\\AQ_0000\\5&116A715B&0&UID0", + "ScreenWidth": 1024, + "Availability": 3, + "ErrorCleared": false, + "ScreenHeight": 768, + "LastErrorCode": 0, + "ErrorDescription": "", + "CreationClassName": "Win32_DesktopMonitor", + "MonitorManufacturer": "(Standard monitor types)", + "PixelsPerXLogicalInch": 96, + "PixelsPerYLogicalInch": 96, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ] + ], + "network_adapter": [ + [ + { + "GUID": "", + "Name": "Microsoft Kernel Debug Network Adapter", + "Index": 0, + "Speed": 0, + "Status": "", + "Caption": "[00000000] Microsoft Kernel Debug Network Adapter", + "DeviceID": "0", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "", + "NetEnabled": false, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "", + "Description": "Microsoft Kernel Debug Network Adapter", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "ROOT\\KDNIC\\0000", + "ProductName": "Microsoft Kernel Debug Network Adapter", + "ServiceName": "kdnic", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Microsoft", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 14, + "NetConnectionID": "", + "PhysicalAdapter": false, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 0, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "{07BCD0FA-68CB-43DA-A95C-9F5761C070E4}", + "Name": "Broadcom NetXtreme Gigabit Ethernet", + "Index": 1, + "Speed": 9223372036854776000, + "Status": "", + "Caption": "[00000001] Broadcom NetXtreme Gigabit Ethernet", + "DeviceID": "1", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "3C:A8:2A:E6:27:C9", + "NetEnabled": false, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_3383103C&REV_01\\00003CA82AE627C901", + "ProductName": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Broadcom Corporation", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 3, + "NetConnectionID": "Ethernet", + "PhysicalAdapter": true, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 7, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "{EB82D1C8-1AE1-436F-92C9-CAAC93E72E95}", + "Name": "Broadcom NetXtreme Gigabit Ethernet", + "Index": 2, + "Speed": 0, + "Status": "", + "Caption": "[00000002] Broadcom NetXtreme Gigabit Ethernet", + "DeviceID": "2", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "94:18:82:6E:16:2C", + "NetEnabled": true, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_22BE103C&REV_01\\00009418826E162C00", + "ProductName": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Broadcom Corporation", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 17, + "NetConnectionID": "Embedded LOM 1 Port 1", + "PhysicalAdapter": true, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 2, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "{77E8A4E5-31CE-4618-A6A8-084310C616E2}", + "Name": "Broadcom NetXtreme Gigabit Ethernet #3", + "Index": 3, + "Speed": 9223372036854776000, + "Status": "", + "Caption": "[00000003] Broadcom NetXtreme Gigabit Ethernet", + "DeviceID": "3", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "3C:A8:2A:E6:27:CA", + "NetEnabled": false, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_3383103C&REV_01\\00003CA82AE627CA02", + "ProductName": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Broadcom Corporation", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 10, + "NetConnectionID": "Ethernet 2", + "PhysicalAdapter": true, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 7, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "{7128A11A-718E-430E-98C7-99DE8AE13020}", + "Name": "Broadcom NetXtreme Gigabit Ethernet #4", + "Index": 4, + "Speed": 1000000000, + "Status": "", + "Caption": "[00000004] Broadcom NetXtreme Gigabit Ethernet", + "DeviceID": "4", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "3C:A8:2A:E6:27:C8", + "NetEnabled": true, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_3383103C&REV_01\\00003CA82AE627C800", + "ProductName": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Broadcom Corporation", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 8, + "NetConnectionID": "HOST NIC", + "PhysicalAdapter": true, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 2, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "{1A157B66-2890-4416-B43F-883CD05B8B0B}", + "Name": "Broadcom NetXtreme Gigabit Ethernet", + "Index": 5, + "Speed": 0, + "Status": "", + "Caption": "[00000005] Broadcom NetXtreme Gigabit Ethernet", + "DeviceID": "5", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "94:18:82:6E:16:2D", + "NetEnabled": true, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_22BE103C&REV_01\\00009418826E162D01", + "ProductName": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Broadcom Corporation", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 4, + "NetConnectionID": "Embedded LOM 1 Port 2", + "PhysicalAdapter": true, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 2, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "{C2DD58DC-8153-4492-8A4A-A3C6804BF2D7}", + "Name": "Broadcom NetXtreme Gigabit Ethernet #6", + "Index": 6, + "Speed": 9223372036854776000, + "Status": "", + "Caption": "[00000006] Broadcom NetXtreme Gigabit Ethernet", + "DeviceID": "6", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "3C:A8:2A:E6:27:CB", + "NetEnabled": false, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_3383103C&REV_01\\00003CA82AE627CB03", + "ProductName": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Broadcom Corporation", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 13, + "NetConnectionID": "Ethernet 4", + "PhysicalAdapter": true, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 7, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "{D670A8E4-1D5B-4E7C-90EF-7B95ED0F9A1B}", + "Name": "Broadcom NetXtreme Gigabit Ethernet #7", + "Index": 7, + "Speed": 9223372036854776000, + "Status": "", + "Caption": "[00000007] Broadcom NetXtreme Gigabit Ethernet", + "DeviceID": "7", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "94:18:82:6E:16:2E", + "NetEnabled": false, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_22BE103C&REV_01\\00009418826E162E02", + "ProductName": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Broadcom Corporation", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 15, + "NetConnectionID": "Embedded LOM 1 Port 3", + "PhysicalAdapter": true, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 7, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "{3E4991C7-0C2C-42BB-A40F-133AAD11FB34}", + "Name": "Broadcom NetXtreme Gigabit Ethernet #8", + "Index": 8, + "Speed": 9223372036854776000, + "Status": "", + "Caption": "[00000008] Broadcom NetXtreme Gigabit Ethernet", + "DeviceID": "8", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "94:18:82:6E:16:2F", + "NetEnabled": false, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Broadcom NetXtreme Gigabit Ethernet", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_22BE103C&REV_01\\00009418826E162F03", + "ProductName": "Broadcom NetXtreme Gigabit Ethernet", + "ServiceName": "b57nd60a", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Broadcom Corporation", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 6, + "NetConnectionID": "Embedded LOM 1 Port 4", + "PhysicalAdapter": true, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 7, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "", + "Name": "Hyper-V Virtual Switch Extension Adapter", + "Index": 9, + "Speed": 0, + "Status": "", + "Caption": "[00000009] Hyper-V Virtual Switch Extension Adapter", + "DeviceID": "9", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "", + "NetEnabled": false, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Hyper-V Virtual Switch Extension Adapter", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "ROOT\\VMS_VSMP\\0000", + "ProductName": "Hyper-V Virtual Switch Extension Adapter", + "ServiceName": "VMSMP", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Microsoft", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 16, + "NetConnectionID": "", + "PhysicalAdapter": false, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 0, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "{76543B78-0150-491F-9CF7-5195A55FFDD5}", + "Name": "Hyper-V Virtual Ethernet Adapter", + "Index": 10, + "Speed": 1000000000, + "Status": "", + "Caption": "[00000010] Hyper-V Virtual Ethernet Adapter", + "DeviceID": "10", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "94:18:82:6E:16:2D", + "NetEnabled": true, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Hyper-V Virtual Ethernet Adapter", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "ROOT\\VMS_MP\\0000", + "ProductName": "Hyper-V Virtual Ethernet Adapter", + "ServiceName": "VMSNPXYMP", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Microsoft", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 9, + "NetConnectionID": "vEthernet (SHARED1)", + "PhysicalAdapter": true, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 2, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "", + "Name": "Hyper-V Virtual Switch Extension Adapter", + "Index": 11, + "Speed": 0, + "Status": "", + "Caption": "[00000011] Hyper-V Virtual Switch Extension Adapter", + "DeviceID": "11", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "", + "NetEnabled": false, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Hyper-V Virtual Switch Extension Adapter", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "ROOT\\VMS_VSMP\\0001", + "ProductName": "Hyper-V Virtual Switch Extension Adapter", + "ServiceName": "VMSMP", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Microsoft", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 11, + "NetConnectionID": "", + "PhysicalAdapter": false, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 0, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ], + [ + { + "GUID": "{549B2925-331C-4865-9148-8D5AFCB1B054}", + "Name": "Hyper-V Virtual Ethernet Adapter #2", + "Index": 12, + "Speed": 1000000000, + "Status": "", + "Caption": "[00000012] Hyper-V Virtual Ethernet Adapter", + "DeviceID": "12", + "MaxSpeed": 0, + "AutoSense": false, + "MACAddress": "94:18:82:6E:16:2C", + "NetEnabled": true, + "StatusInfo": 0, + "SystemName": "VNVMHOSTSRV4", + "AdapterType": "Ethernet 802.3", + "Description": "Hyper-V Virtual Ethernet Adapter", + "InstallDate": "0001-01-01T00:00:00Z", + "PNPDeviceID": "ROOT\\VMS_MP\\0001", + "ProductName": "Hyper-V Virtual Ethernet Adapter", + "ServiceName": "VMSNPXYMP", + "Availability": 3, + "ErrorCleared": false, + "Manufacturer": "Microsoft", + "AdapterTypeID": 0, + "LastErrorCode": 0, + "InterfaceIndex": 7, + "NetConnectionID": "vEthernet (SHARED2)", + "PhysicalAdapter": true, + "TimeOfLastReset": "2020-11-12T08:09:38.56763-08:00", + "ErrorDescription": "", + "NetworkAddresses": null, + "PermanentAddress": "", + "CreationClassName": "Win32_NetworkAdapter", + "MaxNumberControlled": 0, + "NetConnectionStatus": 2, + "ConfigManagerErrorCode": 0, + "ConfigManagerUserConfig": false, + "SystemCreationClassName": "Win32_ComputerSystem", + "PowerManagementSupported": false + } + ] + ] +} \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/test_data/wmi2.json b/api/tacticalrmm/tacticalrmm/test_data/wmi2.json new file mode 100644 index 0000000000..0de8f8b6d8 --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/wmi2.json @@ -0,0 +1,3613 @@ +{ + "graphics": [ + [ + { + "Name": "NVIDIA Quadro P520", + "Status": "OK", + "Caption": "NVIDIA Quadro P520", + "DeviceID": "VideoController1", + "AdapterRAM": 2147483648, + "DriverDate": "2020-11-20T00:00:00Z", + "SystemName": "SERVER123456", + "Description": "NVIDIA Quadro P520", + "InstallDate": "0001-01-01T00:00:00Z", + "Availability": 3, + "DriverVersion": "27.21.14.5266", + "AdapterDACType": "Integrated RAMDAC", + "MaxRefreshRate": 0, + "MinRefreshRate": 0, + "VideoProcessor": "Quadro P520", + "TimeOfLastReset": "0001-01-01T00:00:00Z", + "CurrentRefreshRate": 60, + "MaxMemorySupported": 0, + "AdapterCompatibility": "NVIDIA", + "VideoModeDescription": "2560 x 1440 x 4294967296 colors", + "CapabilityDescriptions": null, + "AcceleratorCapabilities": null, + "InstalledDisplayDrivers": "C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll", + "SystemCreationClassName": "Win32_ComputerSystem", + "CurrentVerticalResolution": 1440 + } + ] + ], + "os": [ + [ + { + "BootDevice": "\\Device\\HarddiskVolume4" + }, + { + "BuildNumber": "17763" + }, + { + "BuildType": "Multiprocessor Free" + }, + { + "Caption": "Microsoft Windows Server 2019 Standard" + }, + { + "CodeSet": "1252" + }, + { + "CountryCode": "1" + }, + { + "CreationClassName": "Win32_OperatingSystem" + }, + { + "CSCreationClassName": "Win32_ComputerSystem" + }, + { + "CSName": "SERVER123456" + }, + { + "CurrentTimeZone": -420 + }, + { + "DataExecutionPrevention_32BitApplications": true + }, + { + "DataExecutionPrevention_Available": true + }, + { + "DataExecutionPrevention_Drivers": true + }, + { + "DataExecutionPrevention_SupportPolicy": 3 + }, + { + "Debug": false + }, + { + "Description": "" + }, + { + "Distributed": false + }, + { + "EncryptionLevel": 256 + }, + { + "ForegroundApplicationBoost": 2 + }, + { + "FreePhysicalMemory": "101909320" + }, + { + "FreeSpaceInPagingFiles": "29360128" + }, + { + "FreeVirtualMemory": "131687780" + }, + { + "InstallDate": "20200221133221.000000-420" + }, + { + "LastBootUpTime": "20200221153223.097418-420" + }, + { + "LocalDateTime": "20200712234402.775000-420" + }, + { + "Locale": "0409" + }, + { + "Manufacturer": "Microsoft Corporation" + }, + { + "MaxNumberOfProcesses": -1 + }, + { + "MaxProcessMemorySize": "137438953344" + }, + { + "MUILanguages": [ + "en-US" + ] + }, + { + "Name": "Microsoft Windows Server 2019 Standard|C:\\Windows|\\Device\\Harddisk2\\Partition4" + }, + { + "NumberOfLicensedUsers": 0 + }, + { + "NumberOfProcesses": 133 + }, + { + "NumberOfUsers": 1 + }, + { + "OperatingSystemSKU": 7 + }, + { + "Organization": "" + }, + { + "OSArchitecture": "64-bit" + }, + { + "OSLanguage": 1033 + }, + { + "OSProductSuite": 272 + }, + { + "OSType": 18 + }, + { + "PortableOperatingSystem": false + }, + { + "Primary": true + }, + { + "ProductType": 3 + }, + { + "RegisteredUser": "Windows User" + }, + { + "SerialNumber": "123456" + }, + { + "ServicePackMajorVersion": 0 + }, + { + "ServicePackMinorVersion": 0 + }, + { + "SizeStoredInPagingFiles": "29360128" + }, + { + "Status": "OK" + }, + { + "SuiteMask": 272 + }, + { + "SystemDevice": "\\Device\\HarddiskVolume6" + }, + { + "SystemDirectory": "C:\\Windows\\system32" + }, + { + "SystemDrive": "C:" + }, + { + "TotalVirtualMemorySize": "230546044" + }, + { + "TotalVisibleMemorySize": "201185916" + }, + { + "Version": "10.0.17763" + }, + { + "WindowsDirectory": "C:\\Windows" + } + ] + ], + "cpu": [ + [ + { + "AddressWidth": 64 + }, + { + "Architecture": 9 + }, + { + "AssetTag": "UNKNOWN" + }, + { + "Availability": 3 + }, + { + "Caption": "Intel64 Family 6 Model 79 Stepping 1" + }, + { + "Characteristics": 252 + }, + { + "CpuStatus": 1 + }, + { + "CreationClassName": "Win32_Processor" + }, + { + "CurrentClockSpeed": 2098 + }, + { + "CurrentVoltage": 18 + }, + { + "DataWidth": 64 + }, + { + "Description": "Intel64 Family 6 Model 79 Stepping 1" + }, + { + "DeviceID": "CPU0" + }, + { + "ExtClock": 100 + }, + { + "Family": 179 + }, + { + "L2CacheSize": 2048 + }, + { + "L3CacheSize": 20480 + }, + { + "L3CacheSpeed": 0 + }, + { + "Level": 6 + }, + { + "LoadPercentage": 2 + }, + { + "Manufacturer": "GenuineIntel" + }, + { + "MaxClockSpeed": 2098 + }, + { + "Name": "Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz" + }, + { + "NumberOfCores": 8 + }, + { + "NumberOfEnabledCore": 8 + }, + { + "NumberOfLogicalProcessors": 16 + }, + { + "PartNumber": "" + }, + { + "PowerManagementSupported": false + }, + { + "ProcessorId": "BFEBFBFF000406F1" + }, + { + "ProcessorType": 3 + }, + { + "Revision": 20225 + }, + { + "Role": "CPU" + }, + { + "SecondLevelAddressTranslationExtensions": false + }, + { + "SerialNumber": "123456" + }, + { + "SocketDesignation": "Proc 1" + }, + { + "Status": "OK" + }, + { + "StatusInfo": 3 + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "ThreadCount": 16 + }, + { + "UpgradeMethod": 43 + }, + { + "Version": "" + }, + { + "VirtualizationFirmwareEnabled": false + }, + { + "VMMonitorModeExtensions": false + } + ], + [ + { + "AddressWidth": 64 + }, + { + "Architecture": 9 + }, + { + "AssetTag": "UNKNOWN" + }, + { + "Availability": 3 + }, + { + "Caption": "Intel64 Family 6 Model 79 Stepping 1" + }, + { + "Characteristics": 252 + }, + { + "CpuStatus": 1 + }, + { + "CreationClassName": "Win32_Processor" + }, + { + "CurrentClockSpeed": 2098 + }, + { + "CurrentVoltage": 18 + }, + { + "DataWidth": 64 + }, + { + "Description": "Intel64 Family 6 Model 79 Stepping 1" + }, + { + "DeviceID": "CPU1" + }, + { + "ExtClock": 100 + }, + { + "Family": 179 + }, + { + "L2CacheSize": 2048 + }, + { + "L3CacheSize": 20480 + }, + { + "L3CacheSpeed": 0 + }, + { + "Level": 6 + }, + { + "Manufacturer": "GenuineIntel" + }, + { + "MaxClockSpeed": 2098 + }, + { + "Name": "Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz" + }, + { + "NumberOfCores": 8 + }, + { + "NumberOfEnabledCore": 8 + }, + { + "NumberOfLogicalProcessors": 16 + }, + { + "PartNumber": "" + }, + { + "PowerManagementSupported": false + }, + { + "ProcessorId": "BFEBFBFF000406F1" + }, + { + "ProcessorType": 3 + }, + { + "Revision": 20225 + }, + { + "Role": "CPU" + }, + { + "SecondLevelAddressTranslationExtensions": false + }, + { + "SerialNumber": "123456" + }, + { + "SocketDesignation": "Proc 2" + }, + { + "Status": "OK" + }, + { + "StatusInfo": 3 + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "ThreadCount": 16 + }, + { + "UpgradeMethod": 43 + }, + { + "Version": "" + }, + { + "VirtualizationFirmwareEnabled": false + }, + { + "VMMonitorModeExtensions": false + } + ] + ], + "mem": [ + [ + { + "Attributes": 1 + }, + { + "BankLabel": "" + }, + { + "Capacity": "17179869184" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "PROC 1 DIMM 1" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "HP " + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "809082-091" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2400 + }, + { + "Tag": "Physical Memory 0" + }, + { + "TotalWidth": 72 + }, + { + "TypeDetail": 8320 + } + ], + [ + { + "Attributes": 1 + }, + { + "BankLabel": "" + }, + { + "Capacity": "17179869184" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "PROC 1 DIMM 4" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "HP " + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "809082-091" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2400 + }, + { + "Tag": "Physical Memory 3" + }, + { + "TotalWidth": 72 + }, + { + "TypeDetail": 8320 + } + ], + [ + { + "Attributes": 1 + }, + { + "BankLabel": "" + }, + { + "Capacity": "17179869184" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "PROC 1 DIMM 9" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "HP " + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "809082-091" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2400 + }, + { + "Tag": "Physical Memory 8" + }, + { + "TotalWidth": 72 + }, + { + "TypeDetail": 8320 + } + ], + [ + { + "Attributes": 1 + }, + { + "BankLabel": "" + }, + { + "Capacity": "17179869184" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "PROC 1 DIMM 12" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "HP " + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "809082-091" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2400 + }, + { + "Tag": "Physical Memory 11" + }, + { + "TotalWidth": 72 + }, + { + "TypeDetail": 8320 + } + ], + [ + { + "Attributes": 2 + }, + { + "BankLabel": "" + }, + { + "Capacity": "34359738368" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "PROC 2 DIMM 1" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "UNKNOWN" + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "NOT AVAILABLE" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2600 + }, + { + "Tag": "Physical Memory 12" + }, + { + "TotalWidth": 72 + }, + { + "TypeDetail": 8320 + } + ], + [ + { + "Attributes": 2 + }, + { + "BankLabel": "" + }, + { + "Capacity": "34359738368" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "PROC 2 DIMM 4" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "UNKNOWN" + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "NOT AVAILABLE" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2600 + }, + { + "Tag": "Physical Memory 15" + }, + { + "TotalWidth": 72 + }, + { + "TypeDetail": 8320 + } + ], + [ + { + "Attributes": 2 + }, + { + "BankLabel": "" + }, + { + "Capacity": "34359738368" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "PROC 2 DIMM 9" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "UNKNOWN" + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "NOT AVAILABLE" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2600 + }, + { + "Tag": "Physical Memory 20" + }, + { + "TotalWidth": 72 + }, + { + "TypeDetail": 8320 + } + ], + [ + { + "Attributes": 2 + }, + { + "BankLabel": "" + }, + { + "Capacity": "34359738368" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "PROC 2 DIMM 12" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "UNKNOWN" + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "NOT AVAILABLE" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2600 + }, + { + "Tag": "Physical Memory 23" + }, + { + "TotalWidth": 72 + }, + { + "TypeDetail": 8320 + } + ] + ], + "usb": [ + [ + { + "Caption": "Standard Universal PCI to USB Host Controller" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_USBController" + }, + { + "Description": "Standard Universal PCI to USB Host Controller" + }, + { + "DeviceID": "PCI\\VEN_103C&DEV_3300&SUBSYS_3381103C&REV_03\\4&2383FE5D&0&04E2" + }, + { + "Manufacturer": "(Standard USB Host Controller)" + }, + { + "Name": "Standard Universal PCI to USB Host Controller" + }, + { + "PNPDeviceID": "PCI\\VEN_103C&DEV_3300&SUBSYS_3381103C&REV_03\\4&2383FE5D&0&04E2" + }, + { + "ProtocolSupported": 16 + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + } + ], + [ + { + "Caption": "Standard Enhanced PCI to USB Host Controller" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_USBController" + }, + { + "Description": "Standard Enhanced PCI to USB Host Controller" + }, + { + "DeviceID": "PCI\\VEN_8086&DEV_8D2D&SUBSYS_8030103C&REV_05\\3&11583659&0&D0" + }, + { + "Manufacturer": "(Standard USB Host Controller)" + }, + { + "Name": "Standard Enhanced PCI to USB Host Controller" + }, + { + "PNPDeviceID": "PCI\\VEN_8086&DEV_8D2D&SUBSYS_8030103C&REV_05\\3&11583659&0&D0" + }, + { + "ProtocolSupported": 16 + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + } + ], + [ + { + "Caption": "Standard Enhanced PCI to USB Host Controller" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_USBController" + }, + { + "Description": "Standard Enhanced PCI to USB Host Controller" + }, + { + "DeviceID": "PCI\\VEN_8086&DEV_8D26&SUBSYS_8030103C&REV_05\\3&11583659&0&E8" + }, + { + "Manufacturer": "(Standard USB Host Controller)" + }, + { + "Name": "Standard Enhanced PCI to USB Host Controller" + }, + { + "PNPDeviceID": "PCI\\VEN_8086&DEV_8D26&SUBSYS_8030103C&REV_05\\3&11583659&0&E8" + }, + { + "ProtocolSupported": 16 + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + } + ], + [ + { + "Caption": "Intel(R) USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_USBController" + }, + { + "Description": "USB xHCI Compliant Host Controller" + }, + { + "DeviceID": "PCI\\VEN_8086&DEV_8D31&SUBSYS_8030103C&REV_05\\3&11583659&0&A0" + }, + { + "Manufacturer": "Generic USB xHCI Host Controller" + }, + { + "Name": "Intel(R) USB 3.0 eXtensible Host Controller - 1.0 (Microsoft)" + }, + { + "PNPDeviceID": "PCI\\VEN_8086&DEV_8D31&SUBSYS_8030103C&REV_05\\3&11583659&0&A0" + }, + { + "ProtocolSupported": 16 + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + } + ] + ], + "bios": [ + [ + { + "BiosCharacteristics": [ + 7, + 9, + 11, + 12, + 14, + 15, + 16, + 19, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 30, + 32, + 33, + 40, + 41, + 42, + 43 + ] + }, + { + "BIOSVersion": [ + "HP - 1", + "P89", + "HP - 21E00" + ] + }, + { + "Caption": "P89" + }, + { + "Description": "P89" + }, + { + "EmbeddedControllerMajorVersion": 2 + }, + { + "EmbeddedControllerMinorVersion": 50 + }, + { + "Manufacturer": "HP" + }, + { + "Name": "P89" + }, + { + "PrimaryBIOS": true + }, + { + "ReleaseDate": "20160913000000.000000+000" + }, + { + "SerialNumber": "123456" + }, + { + "SMBIOSBIOSVersion": "P89" + }, + { + "SMBIOSMajorVersion": 2 + }, + { + "SMBIOSMinorVersion": 8 + }, + { + "SMBIOSPresent": true + }, + { + "SoftwareElementID": "P89" + }, + { + "SoftwareElementState": 3 + }, + { + "Status": "OK" + }, + { + "SystemBiosMajorVersion": 2 + }, + { + "SystemBiosMinorVersion": 30 + }, + { + "TargetOperatingSystem": 0 + }, + { + "Version": "HP - 1" + } + ] + ], + "disk": [ + [ + { + "BytesPerSector": 512 + }, + { + "Capabilities": [ + 3, + 4 + ] + }, + { + "CapabilityDescriptions": [ + "Random Access", + "Supports Writing" + ] + }, + { + "Caption": "Microsoft Storage Space Device" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_DiskDrive" + }, + { + "Description": "Disk drive" + }, + { + "DeviceID": "\\\\.\\PHYSICALDRIVE5" + }, + { + "FirmwareRevision": "0.1" + }, + { + "Index": 5 + }, + { + "InterfaceType": "SCSI" + }, + { + "Manufacturer": "(Standard disk drives)" + }, + { + "MediaLoaded": true + }, + { + "MediaType": "Fixed hard disk media" + }, + { + "Model": "Microsoft Storage Space Device" + }, + { + "Name": "\\\\.\\PHYSICALDRIVE5" + }, + { + "Partitions": 1 + }, + { + "PNPDeviceID": "STORAGE\\DISK\\{C905ECA4-6609-4829-8510-DB4D3AFD36E6}" + }, + { + "SCSIBus": 0 + }, + { + "SCSILogicalUnit": 1 + }, + { + "SCSIPort": 0 + }, + { + "SCSITargetId": 0 + }, + { + "SectorsPerTrack": 63 + }, + { + "SerialNumber": "123456" + }, + { + "Size": "3962100925440" + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TotalCylinders": "481698" + }, + { + "TotalHeads": 255 + }, + { + "TotalSectors": "7738478370" + }, + { + "TotalTracks": "122832990" + }, + { + "TracksPerCylinder": 255 + } + ], + [ + { + "BytesPerSector": 512 + }, + { + "Capabilities": [ + 3, + 4 + ] + }, + { + "CapabilityDescriptions": [ + "Random Access", + "Supports Writing" + ] + }, + { + "Caption": "ATA CT500MX500SSD1 SCSI Disk Device" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_DiskDrive" + }, + { + "Description": "Disk drive" + }, + { + "DeviceID": "\\\\.\\PHYSICALDRIVE3" + }, + { + "FirmwareRevision": "023 " + }, + { + "Index": 3 + }, + { + "InterfaceType": "SCSI" + }, + { + "Manufacturer": "(Standard disk drives)" + }, + { + "MediaLoaded": true + }, + { + "MediaType": "Fixed hard disk media" + }, + { + "Model": "ATA CT500MX500SSD1 SCSI Disk Device" + }, + { + "Name": "\\\\.\\PHYSICALDRIVE3" + }, + { + "Partitions": 0 + }, + { + "PNPDeviceID": "SCSI\\DISK&VEN_ATA&PROD_CT500MX500SSD1\\5&2F1553C3&0&000700" + }, + { + "SCSIBus": 0 + }, + { + "SCSILogicalUnit": 0 + }, + { + "SCSIPort": 0 + }, + { + "SCSITargetId": 7 + }, + { + "SectorsPerTrack": 63 + }, + { + "SerialNumber": "123456" + }, + { + "Size": "500105249280" + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TotalCylinders": "60801" + }, + { + "TotalHeads": 255 + }, + { + "TotalSectors": "976768065" + }, + { + "TotalTracks": "15504255" + }, + { + "TracksPerCylinder": 255 + } + ], + [ + { + "BytesPerSector": 512 + }, + { + "Capabilities": [ + 3, + 4 + ] + }, + { + "CapabilityDescriptions": [ + "Random Access", + "Supports Writing" + ] + }, + { + "Caption": "ATA Crucial_CT500MX2 SCSI Disk Device" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_DiskDrive" + }, + { + "Description": "Disk drive" + }, + { + "DeviceID": "\\\\.\\PHYSICALDRIVE2" + }, + { + "FirmwareRevision": "MU02" + }, + { + "Index": 2 + }, + { + "InterfaceType": "SCSI" + }, + { + "Manufacturer": "(Standard disk drives)" + }, + { + "MediaLoaded": true + }, + { + "MediaType": "Fixed hard disk media" + }, + { + "Model": "ATA Crucial_CT500MX2 SCSI Disk Device" + }, + { + "Name": "\\\\.\\PHYSICALDRIVE2" + }, + { + "Partitions": 3 + }, + { + "PNPDeviceID": "SCSI\\DISK&VEN_ATA&PROD_CRUCIAL_CT500MX2\\5&2F1553C3&0&000600" + }, + { + "SCSIBus": 0 + }, + { + "SCSILogicalUnit": 0 + }, + { + "SCSIPort": 0 + }, + { + "SCSITargetId": 6 + }, + { + "SectorsPerTrack": 63 + }, + { + "SerialNumber": "123456" + }, + { + "Size": "500105249280" + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TotalCylinders": "60801" + }, + { + "TotalHeads": 255 + }, + { + "TotalSectors": "976768065" + }, + { + "TotalTracks": "15504255" + }, + { + "TracksPerCylinder": 255 + } + ] + ], + "comp_sys": [ + [ + { + "AdminPasswordStatus": 3 + }, + { + "AutomaticManagedPagefile": true + }, + { + "AutomaticResetBootOption": true + }, + { + "AutomaticResetCapability": true + }, + { + "BootROMSupported": true + }, + { + "BootStatus": [ + 0, + 0, + 0, + 196, + 15, + 194, + 0, + 0, + 0, + 0 + ] + }, + { + "BootupState": "Normal boot" + }, + { + "Caption": "SERVER123456" + }, + { + "ChassisBootupState": 3 + }, + { + "CreationClassName": "Win32_ComputerSystem" + }, + { + "CurrentTimeZone": -420 + }, + { + "DaylightInEffect": true + }, + { + "Description": "AT/AT COMPATIBLE" + }, + { + "DNSHostName": "SERVER123456" + }, + { + "Domain": "WORKGROUP" + }, + { + "DomainRole": 2 + }, + { + "EnableDaylightSavingsTime": true + }, + { + "FrontPanelResetStatus": 3 + }, + { + "HypervisorPresent": true + }, + { + "InfraredSupported": false + }, + { + "KeyboardPasswordStatus": 3 + }, + { + "Manufacturer": "HP" + }, + { + "Model": "ProLiant DL380 Gen9" + }, + { + "Name": "SERVER123456" + }, + { + "NetworkServerModeEnabled": true + }, + { + "NumberOfLogicalProcessors": 32 + }, + { + "NumberOfProcessors": 2 + }, + { + "OEMStringArray": [ + "PSF: ", + "Product ID: 859084-S01", + "OEM String: " + ] + }, + { + "PartOfDomain": false + }, + { + "PauseAfterReset": "-1" + }, + { + "PCSystemType": 4 + }, + { + "PCSystemTypeEx": 4 + }, + { + "PowerOnPasswordStatus": 3 + }, + { + "PowerState": 0 + }, + { + "PowerSupplyState": 3 + }, + { + "PrimaryOwnerName": "Windows User" + }, + { + "ResetCapability": 1 + }, + { + "ResetCount": -1 + }, + { + "ResetLimit": -1 + }, + { + "Roles": [ + "LM_Workstation", + "LM_Server", + "NT", + "Server_NT" + ] + }, + { + "Status": "OK" + }, + { + "SystemFamily": "ProLiant" + }, + { + "SystemSKUNumber": "859084-S01" + }, + { + "SystemType": "x64-based PC" + }, + { + "ThermalState": 3 + }, + { + "TotalPhysicalMemory": "206014377984" + }, + { + "WakeUpType": 6 + }, + { + "Workgroup": "WORKGROUP" + } + ] + ], + "base_board": [ + [ + { + "Caption": "Base Board" + }, + { + "CreationClassName": "Win32_BaseBoard" + }, + { + "Description": "Base Board" + }, + { + "HostingBoard": true + }, + { + "HotSwappable": false + }, + { + "Manufacturer": "HP" + }, + { + "Name": "Base Board" + }, + { + "PoweredOn": true + }, + { + "Product": "ProLiant DL380 Gen9" + }, + { + "Removable": true + }, + { + "Replaceable": true + }, + { + "RequiresDaughterBoard": false + }, + { + "SerialNumber": "123456" + }, + { + "Status": "OK" + }, + { + "Tag": "Base Board" + } + ] + ], + "comp_sys_prod": [ + [ + { + "Caption": "Computer System Product" + }, + { + "Description": "Computer System Product" + }, + { + "IdentifyingNumber": "123456" + }, + { + "Name": "ProLiant DL380 Gen9" + }, + { + "UUID": "123456" + }, + { + "Vendor": "HP" + }, + { + "Version": "" + } + ] + ], + "network_config": [ + [ + { + "Caption": "[00000000] Microsoft Kernel Debug Network Adapter" + }, + { + "Description": "Microsoft Kernel Debug Network Adapter" + }, + { + "DHCPEnabled": true + }, + { + "Index": 0 + }, + { + "InterfaceIndex": 11 + }, + { + "IPEnabled": false + }, + { + "ServiceName": "kdnic" + }, + { + "SettingID": "{C8813F21-FC58-4EF5-B6DE-F10DF9AFF459}" + } + ], + [ + { + "Caption": "[00000001] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DHCPEnabled": true + }, + { + "Index": 1 + }, + { + "InterfaceIndex": 3 + }, + { + "IPEnabled": false + }, + { + "MACAddress": "3C:A8:2A:E6:27:C9" + }, + { + "ServiceName": "b57nd60a" + }, + { + "SettingID": "{07BCD0FA-68CB-43DA-A95C-9F5761C070E4}" + } + ], + [ + { + "Caption": "[00000002] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DHCPEnabled": true + }, + { + "Index": 2 + }, + { + "InterfaceIndex": 13 + }, + { + "IPEnabled": false + }, + { + "MACAddress": "94:18:82:6E:16:2C" + }, + { + "ServiceName": "b57nd60a" + }, + { + "SettingID": "{EB82D1C8-1AE1-436F-92C9-CAAC93E72E95}" + } + ], + [ + { + "Caption": "[00000003] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DHCPEnabled": true + }, + { + "Index": 3 + }, + { + "InterfaceIndex": 8 + }, + { + "IPEnabled": false + }, + { + "MACAddress": "3C:A8:2A:E6:27:CA" + }, + { + "ServiceName": "b57nd60a" + }, + { + "SettingID": "{77E8A4E5-31CE-4618-A6A8-084310C616E2}" + } + ], + [ + { + "Caption": "[00000004] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DatabasePath": "%SystemRoot%\\System32\\drivers\\etc" + }, + { + "DefaultIPGateway": [ + "172.17.0.1" + ] + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet #4" + }, + { + "DHCPEnabled": true + }, + { + "DHCPLeaseExpires": "20200713203019.000000-420" + }, + { + "DHCPLeaseObtained": "20200712203019.000000-420" + }, + { + "DHCPServer": "172.17.0.1" + }, + { + "DNSDomainSuffixSearchOrder": [] + }, + { + "DNSEnabledForWINSResolution": false + }, + { + "DNSHostName": "SERVER123456" + }, + { + "DNSServerSearchOrder": [ + "172.17.4.11", + "172.17.4.22", + "172.17.4.86" + ] + }, + { + "DomainDNSRegistrationEnabled": false + }, + { + "FullDNSRegistrationEnabled": true + }, + { + "GatewayCostMetric": [ + 0 + ] + }, + { + "Index": 4 + }, + { + "InterfaceIndex": 7 + }, + { + "IPAddress": [ + "172.17.9.121", + "fe80::45d7:5980:c39a:b6b2" + ] + }, + { + "IPConnectionMetric": 25 + }, + { + "IPEnabled": true + }, + { + "IPFilterSecurityEnabled": false + }, + { + "IPSecPermitIPProtocols": [] + }, + { + "IPSecPermitTCPPorts": [] + }, + { + "IPSecPermitUDPPorts": [] + }, + { + "IPSubnet": [ + "255.255.240.0", + "64" + ] + }, + { + "MACAddress": "3C:A8:2A:E6:27:C8" + }, + { + "ServiceName": "b57nd60a" + }, + { + "SettingID": "{7128A11A-718E-430E-98C7-99DE8AE13020}" + }, + { + "TcpipNetbiosOptions": 0 + }, + { + "WINSEnableLMHostsLookup": true + }, + { + "WINSScopeID": "" + } + ], + [ + { + "Caption": "[00000005] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DHCPEnabled": true + }, + { + "Index": 5 + }, + { + "InterfaceIndex": 4 + }, + { + "IPEnabled": false + }, + { + "MACAddress": "94:18:82:6E:16:2D" + }, + { + "ServiceName": "b57nd60a" + }, + { + "SettingID": "{1A157B66-2890-4416-B43F-883CD05B8B0B}" + } + ], + [ + { + "Caption": "[00000006] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DHCPEnabled": true + }, + { + "Index": 6 + }, + { + "InterfaceIndex": 10 + }, + { + "IPEnabled": false + }, + { + "MACAddress": "3C:A8:2A:E6:27:CB" + }, + { + "ServiceName": "b57nd60a" + }, + { + "SettingID": "{C2DD58DC-8153-4492-8A4A-A3C6804BF2D7}" + } + ], + [ + { + "Caption": "[00000007] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DHCPEnabled": true + }, + { + "Index": 7 + }, + { + "InterfaceIndex": 12 + }, + { + "IPEnabled": false + }, + { + "MACAddress": "94:18:82:6E:16:2E" + }, + { + "ServiceName": "b57nd60a" + }, + { + "SettingID": "{D670A8E4-1D5B-4E7C-90EF-7B95ED0F9A1B}" + } + ], + [ + { + "Caption": "[00000008] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DHCPEnabled": true + }, + { + "Index": 8 + }, + { + "InterfaceIndex": 6 + }, + { + "IPEnabled": false + }, + { + "MACAddress": "94:18:82:6E:16:2F" + }, + { + "ServiceName": "b57nd60a" + }, + { + "SettingID": "{3E4991C7-0C2C-42BB-A40F-133AAD11FB34}" + } + ], + [ + { + "Caption": "[00000009] Hyper-V Virtual Switch Extension Adapter" + }, + { + "Description": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "DHCPEnabled": false + }, + { + "Index": 9 + }, + { + "InterfaceIndex": 38 + }, + { + "IPEnabled": false + }, + { + "ServiceName": "VMSMP" + }, + { + "SettingID": "{DA1BE60D-9764-4A53-A05A-BAFD7D6D8622}" + } + ], + [ + { + "Caption": "[00000010] Hyper-V Virtual Ethernet Adapter" + }, + { + "DatabasePath": "%SystemRoot%\\System32\\drivers\\etc" + }, + { + "DefaultIPGateway": [ + "172.17.0.1" + ] + }, + { + "Description": "Hyper-V Virtual Ethernet Adapter" + }, + { + "DHCPEnabled": true + }, + { + "DHCPLeaseExpires": "20200713203024.000000-420" + }, + { + "DHCPLeaseObtained": "20200712203024.000000-420" + }, + { + "DHCPServer": "172.17.0.1" + }, + { + "DNSDomainSuffixSearchOrder": [] + }, + { + "DNSEnabledForWINSResolution": false + }, + { + "DNSHostName": "SERVER123456" + }, + { + "DNSServerSearchOrder": [ + "8.8.8.8", + "208.67.222.222" + ] + }, + { + "DomainDNSRegistrationEnabled": false + }, + { + "FullDNSRegistrationEnabled": true + }, + { + "GatewayCostMetric": [ + 0 + ] + }, + { + "Index": 10 + }, + { + "InterfaceIndex": 30 + }, + { + "IPAddress": [ + "172.17.9.6", + "fe80::6017:bb9f:9609:aa1" + ] + }, + { + "IPConnectionMetric": 25 + }, + { + "IPEnabled": true + }, + { + "IPFilterSecurityEnabled": false + }, + { + "IPSecPermitIPProtocols": [] + }, + { + "IPSecPermitTCPPorts": [] + }, + { + "IPSecPermitUDPPorts": [] + }, + { + "IPSubnet": [ + "255.255.240.0", + "64" + ] + }, + { + "MACAddress": "94:18:82:6E:16:2D" + }, + { + "ServiceName": "VMSNPXYMP" + }, + { + "SettingID": "{76543B78-0150-491F-9CF7-5195A55FFDD5}" + }, + { + "TcpipNetbiosOptions": 0 + }, + { + "WINSEnableLMHostsLookup": true + }, + { + "WINSScopeID": "" + } + ], + [ + { + "Caption": "[00000011] Hyper-V Virtual Switch Extension Adapter" + }, + { + "Description": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "DHCPEnabled": false + }, + { + "Index": 11 + }, + { + "InterfaceIndex": 42 + }, + { + "IPEnabled": false + }, + { + "ServiceName": "VMSMP" + }, + { + "SettingID": "{78CB2FB1-3139-40D7-A3F2-63B3A63943D6}" + } + ], + [ + { + "Caption": "[00000012] Hyper-V Virtual Ethernet Adapter" + }, + { + "DatabasePath": "%SystemRoot%\\System32\\drivers\\etc" + }, + { + "DefaultIPGateway": [ + "172.17.0.1" + ] + }, + { + "Description": "Hyper-V Virtual Ethernet Adapter #2" + }, + { + "DHCPEnabled": true + }, + { + "DHCPLeaseExpires": "20200713203024.000000-420" + }, + { + "DHCPLeaseObtained": "20200712203024.000000-420" + }, + { + "DHCPServer": "172.17.0.1" + }, + { + "DNSDomainSuffixSearchOrder": [] + }, + { + "DNSEnabledForWINSResolution": false + }, + { + "DNSHostName": "SERVER123456" + }, + { + "DNSServerSearchOrder": [ + "8.8.8.8", + "208.67.222.222" + ] + }, + { + "DomainDNSRegistrationEnabled": false + }, + { + "FullDNSRegistrationEnabled": true + }, + { + "GatewayCostMetric": [ + 0 + ] + }, + { + "Index": 12 + }, + { + "InterfaceIndex": 27 + }, + { + "IPAddress": [ + "172.17.9.122", + "fe80::f8a1:3a0c:e2c7:d174" + ] + }, + { + "IPConnectionMetric": 25 + }, + { + "IPEnabled": true + }, + { + "IPFilterSecurityEnabled": false + }, + { + "IPSecPermitIPProtocols": [] + }, + { + "IPSecPermitTCPPorts": [] + }, + { + "IPSecPermitUDPPorts": [] + }, + { + "IPSubnet": [ + "255.255.240.0", + "64" + ] + }, + { + "MACAddress": "94:18:82:6E:16:2C" + }, + { + "ServiceName": "VMSNPXYMP" + }, + { + "SettingID": "{549B2925-331C-4865-9148-8D5AFCB1B054}" + }, + { + "TcpipNetbiosOptions": 0 + }, + { + "WINSEnableLMHostsLookup": true + }, + { + "WINSScopeID": "" + } + ] + ], + "desktop_monitor": [ + [ + { + "Availability": 8 + }, + { + "Caption": "Generic PnP Monitor" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_DesktopMonitor" + }, + { + "Description": "Generic PnP Monitor" + }, + { + "DeviceID": "DesktopMonitor1" + }, + { + "MonitorManufacturer": "(Standard monitor types)" + }, + { + "MonitorType": "Generic PnP Monitor" + }, + { + "Name": "Generic PnP Monitor" + }, + { + "PixelsPerXLogicalInch": 96 + }, + { + "PixelsPerYLogicalInch": 96 + }, + { + "PNPDeviceID": "DISPLAY\\AQ_0000\\5&116A715B&0&UID0" + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + } + ] + ], + "network_adapter": [ + [ + { + "Availability": 3 + }, + { + "Caption": "[00000000] Microsoft Kernel Debug Network Adapter" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Microsoft Kernel Debug Network Adapter" + }, + { + "DeviceID": "0" + }, + { + "Index": 0 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 11 + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Microsoft Kernel Debug Network Adapter" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "ROOT\\KDNIC\\0000" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Microsoft Kernel Debug Network Adapter" + }, + { + "ServiceName": "kdnic" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000001] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DeviceID": "1" + }, + { + "GUID": "{07BCD0FA-68CB-43DA-A95C-9F5761C070E4}" + }, + { + "Index": 1 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 3 + }, + { + "MACAddress": "3C:A8:2A:E6:27:C9" + }, + { + "Manufacturer": "Broadcom Corporation" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "NetConnectionID": "Ethernet" + }, + { + "NetConnectionStatus": 7 + }, + { + "NetEnabled": false + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_3383103C&REV_01\\00003CA82AE627C901" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ServiceName": "b57nd60a" + }, + { + "Speed": "9223372036854775807" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000002] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DeviceID": "2" + }, + { + "GUID": "{EB82D1C8-1AE1-436F-92C9-CAAC93E72E95}" + }, + { + "Index": 2 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 13 + }, + { + "MACAddress": "94:18:82:6E:16:2C" + }, + { + "Manufacturer": "Broadcom Corporation" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "NetConnectionID": "Embedded LOM 1 Port 1" + }, + { + "NetConnectionStatus": 2 + }, + { + "NetEnabled": true + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_22BE103C&REV_01\\00009418826E162C00" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ServiceName": "b57nd60a" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000003] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DeviceID": "3" + }, + { + "GUID": "{77E8A4E5-31CE-4618-A6A8-084310C616E2}" + }, + { + "Index": 3 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 8 + }, + { + "MACAddress": "3C:A8:2A:E6:27:CA" + }, + { + "Manufacturer": "Broadcom Corporation" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Broadcom NetXtreme Gigabit Ethernet #3" + }, + { + "NetConnectionID": "Ethernet 2" + }, + { + "NetConnectionStatus": 7 + }, + { + "NetEnabled": false + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_3383103C&REV_01\\00003CA82AE627CA02" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ServiceName": "b57nd60a" + }, + { + "Speed": "9223372036854775807" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000004] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DeviceID": "4" + }, + { + "GUID": "{7128A11A-718E-430E-98C7-99DE8AE13020}" + }, + { + "Index": 4 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 7 + }, + { + "MACAddress": "3C:A8:2A:E6:27:C8" + }, + { + "Manufacturer": "Broadcom Corporation" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Broadcom NetXtreme Gigabit Ethernet #4" + }, + { + "NetConnectionID": "HOST NIC" + }, + { + "NetConnectionStatus": 2 + }, + { + "NetEnabled": true + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_3383103C&REV_01\\00003CA82AE627C800" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ServiceName": "b57nd60a" + }, + { + "Speed": "1000000000" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000005] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DeviceID": "5" + }, + { + "GUID": "{1A157B66-2890-4416-B43F-883CD05B8B0B}" + }, + { + "Index": 5 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 4 + }, + { + "MACAddress": "94:18:82:6E:16:2D" + }, + { + "Manufacturer": "Broadcom Corporation" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "NetConnectionID": "Embedded LOM 1 Port 2" + }, + { + "NetConnectionStatus": 2 + }, + { + "NetEnabled": true + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_22BE103C&REV_01\\00009418826E162D01" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ServiceName": "b57nd60a" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000006] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DeviceID": "6" + }, + { + "GUID": "{C2DD58DC-8153-4492-8A4A-A3C6804BF2D7}" + }, + { + "Index": 6 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 10 + }, + { + "MACAddress": "3C:A8:2A:E6:27:CB" + }, + { + "Manufacturer": "Broadcom Corporation" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Broadcom NetXtreme Gigabit Ethernet #6" + }, + { + "NetConnectionID": "Ethernet 4" + }, + { + "NetConnectionStatus": 7 + }, + { + "NetEnabled": false + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_3383103C&REV_01\\00003CA82AE627CB03" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ServiceName": "b57nd60a" + }, + { + "Speed": "9223372036854775807" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000007] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DeviceID": "7" + }, + { + "GUID": "{D670A8E4-1D5B-4E7C-90EF-7B95ED0F9A1B}" + }, + { + "Index": 7 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 12 + }, + { + "MACAddress": "94:18:82:6E:16:2E" + }, + { + "Manufacturer": "Broadcom Corporation" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Broadcom NetXtreme Gigabit Ethernet #7" + }, + { + "NetConnectionID": "Embedded LOM 1 Port 3" + }, + { + "NetConnectionStatus": 7 + }, + { + "NetEnabled": false + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_22BE103C&REV_01\\00009418826E162E02" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ServiceName": "b57nd60a" + }, + { + "Speed": "9223372036854775807" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000008] Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "DeviceID": "8" + }, + { + "GUID": "{3E4991C7-0C2C-42BB-A40F-133AAD11FB34}" + }, + { + "Index": 8 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 6 + }, + { + "MACAddress": "94:18:82:6E:16:2F" + }, + { + "Manufacturer": "Broadcom Corporation" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Broadcom NetXtreme Gigabit Ethernet #8" + }, + { + "NetConnectionID": "Embedded LOM 1 Port 4" + }, + { + "NetConnectionStatus": 7 + }, + { + "NetEnabled": false + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "PCI\\VEN_14E4&DEV_1657&SUBSYS_22BE103C&REV_01\\00009418826E162F03" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Broadcom NetXtreme Gigabit Ethernet" + }, + { + "ServiceName": "b57nd60a" + }, + { + "Speed": "9223372036854775807" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000009] Hyper-V Virtual Switch Extension Adapter" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "DeviceID": "9" + }, + { + "Index": 9 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 38 + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "ROOT\\VMS_VSMP\\0000" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "ServiceName": "VMSMP" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000010] Hyper-V Virtual Ethernet Adapter" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Hyper-V Virtual Ethernet Adapter" + }, + { + "DeviceID": "10" + }, + { + "GUID": "{76543B78-0150-491F-9CF7-5195A55FFDD5}" + }, + { + "Index": 10 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 30 + }, + { + "MACAddress": "94:18:82:6E:16:2D" + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Hyper-V Virtual Ethernet Adapter" + }, + { + "NetConnectionID": "vEthernet (SHARED1)" + }, + { + "NetConnectionStatus": 2 + }, + { + "NetEnabled": true + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "ROOT\\VMS_MP\\0000" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Hyper-V Virtual Ethernet Adapter" + }, + { + "ServiceName": "VMSNPXYMP" + }, + { + "Speed": "1000000000" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000011] Hyper-V Virtual Switch Extension Adapter" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "DeviceID": "11" + }, + { + "Index": 11 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 42 + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "ROOT\\VMS_VSMP\\0001" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "ServiceName": "VMSMP" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000012] Hyper-V Virtual Ethernet Adapter" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Hyper-V Virtual Ethernet Adapter" + }, + { + "DeviceID": "12" + }, + { + "GUID": "{549B2925-331C-4865-9148-8D5AFCB1B054}" + }, + { + "Index": 12 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 27 + }, + { + "MACAddress": "94:18:82:6E:16:2C" + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Hyper-V Virtual Ethernet Adapter #2" + }, + { + "NetConnectionID": "vEthernet (SHARED2)" + }, + { + "NetConnectionStatus": 2 + }, + { + "NetEnabled": true + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "ROOT\\VMS_MP\\0001" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Hyper-V Virtual Ethernet Adapter" + }, + { + "ServiceName": "VMSNPXYMP" + }, + { + "Speed": "1000000000" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "SERVER123456" + }, + { + "TimeOfLastReset": "20200221153223.097418-420" + } + ] + ] +} \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/test_data/wmi3.json b/api/tacticalrmm/tacticalrmm/test_data/wmi3.json new file mode 100644 index 0000000000..02df1d018e --- /dev/null +++ b/api/tacticalrmm/tacticalrmm/test_data/wmi3.json @@ -0,0 +1,3102 @@ +{ + "graphics": [ + [ + { + "Name": "NVIDIA Quadro P520", + "Status": "OK", + "Caption": "NVIDIA Quadro P520", + "DeviceID": "VideoController1", + "AdapterRAM": 2147483648, + "DriverDate": "2020-11-20T00:00:00Z", + "SystemName": "VMHOST-123456", + "Description": "NVIDIA Quadro P520", + "InstallDate": "0001-01-01T00:00:00Z", + "Availability": 3, + "DriverVersion": "27.21.14.5266", + "AdapterDACType": "Integrated RAMDAC", + "MaxRefreshRate": 0, + "MinRefreshRate": 0, + "VideoProcessor": "Quadro P520", + "TimeOfLastReset": "0001-01-01T00:00:00Z", + "CurrentRefreshRate": 60, + "MaxMemorySupported": 0, + "AdapterCompatibility": "NVIDIA", + "VideoModeDescription": "2560 x 1440 x 4294967296 colors", + "CapabilityDescriptions": null, + "AcceleratorCapabilities": null, + "InstalledDisplayDrivers": "C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\nvlt.inf_amd64_3156bc34fe7846db\\nvldumdx.dll", + "SystemCreationClassName": "Win32_ComputerSystem", + "CurrentVerticalResolution": 1440 + } + ], + [ + { + "Name": "Intel(R) UHD Graphics 620", + "Status": "OK", + "Caption": "Intel(R) UHD Graphics 620", + "DeviceID": "VideoController2", + "AdapterRAM": 1073741824, + "DriverDate": "2020-10-28T00:00:00Z", + "SystemName": "VMHOST-123456", + "Description": "Intel(R) UHD Graphics 620", + "InstallDate": "0001-01-01T00:00:00Z", + "Availability": 3, + "DriverVersion": "27.20.100.8935", + "AdapterDACType": "Internal", + "MaxRefreshRate": 60, + "MinRefreshRate": 29, + "VideoProcessor": "Intel(R) UHD Graphics Family", + "TimeOfLastReset": "0001-01-01T00:00:00Z", + "CurrentRefreshRate": 59, + "MaxMemorySupported": 0, + "AdapterCompatibility": "Intel Corporation", + "VideoModeDescription": "3840 x 1600 x 4294967296 colors", + "CapabilityDescriptions": null, + "AcceleratorCapabilities": null, + "InstalledDisplayDrivers": "C:\\Windows\\System32\\DriverStore\\FileRepository\\iigd_dch.inf_amd64_997a69017605b77c\\igdumdim64.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\iigd_dch.inf_amd64_997a69017605b77c\\igd10iumd64.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\iigd_dch.inf_amd64_997a69017605b77c\\igd10iumd64.dll,C:\\Windows\\System32\\DriverStore\\FileRepository\\iigd_dch.inf_amd64_997a69017605b77c\\igd12umd64.dll", + "SystemCreationClassName": "Win32_ComputerSystem", + "CurrentVerticalResolution": 1600 + } + ] + ], + "os": [ + [ + { + "BootDevice": "\\Device\\HarddiskVolume5" + }, + { + "BuildNumber": "17763" + }, + { + "BuildType": "Multiprocessor Free" + }, + { + "Caption": "Microsoft Windows Server 2019 Standard" + }, + { + "CodeSet": "1252" + }, + { + "CountryCode": "1" + }, + { + "CreationClassName": "Win32_OperatingSystem" + }, + { + "CSCreationClassName": "Win32_ComputerSystem" + }, + { + "CSName": "VMHOST-123456" + }, + { + "CurrentTimeZone": -420 + }, + { + "DataExecutionPrevention_32BitApplications": true + }, + { + "DataExecutionPrevention_Available": true + }, + { + "DataExecutionPrevention_Drivers": true + }, + { + "DataExecutionPrevention_SupportPolicy": 3 + }, + { + "Debug": false + }, + { + "Description": "" + }, + { + "Distributed": false + }, + { + "EncryptionLevel": 256 + }, + { + "ForegroundApplicationBoost": 2 + }, + { + "FreePhysicalMemory": "68727684" + }, + { + "FreeSpaceInPagingFiles": "19922944" + }, + { + "FreeVirtualMemory": "88989360" + }, + { + "InstallDate": "20200313074752.000000-420" + }, + { + "LastBootUpTime": "20200511200945.500000-420" + }, + { + "LocalDateTime": "20200712214050.120000-420" + }, + { + "Locale": "0409" + }, + { + "Manufacturer": "Microsoft Corporation" + }, + { + "MaxNumberOfProcesses": -1 + }, + { + "MaxProcessMemorySize": "137438953344" + }, + { + "MUILanguages": [ + "en-US" + ] + }, + { + "Name": "Microsoft Windows Server 2019 Standard|C:\\Windows|\\Device\\Harddisk1\\Partition4" + }, + { + "NumberOfLicensedUsers": 0 + }, + { + "NumberOfProcesses": 115 + }, + { + "NumberOfUsers": 0 + }, + { + "OperatingSystemSKU": 7 + }, + { + "Organization": "" + }, + { + "OSArchitecture": "64-bit" + }, + { + "OSLanguage": 1033 + }, + { + "OSProductSuite": 272 + }, + { + "OSType": 18 + }, + { + "PortableOperatingSystem": false + }, + { + "Primary": true + }, + { + "ProductType": 3 + }, + { + "RegisteredUser": "Windows User" + }, + { + "SerialNumber": "123456" + }, + { + "ServicePackMajorVersion": 0 + }, + { + "ServicePackMinorVersion": 0 + }, + { + "SizeStoredInPagingFiles": "19922944" + }, + { + "Status": "OK" + }, + { + "SuiteMask": 272 + }, + { + "SystemDevice": "\\Device\\HarddiskVolume7" + }, + { + "SystemDirectory": "C:\\Windows\\system32" + }, + { + "SystemDrive": "C:" + }, + { + "TotalVirtualMemorySize": "154088928" + }, + { + "TotalVisibleMemorySize": "134165984" + }, + { + "Version": "10.0.17763" + }, + { + "WindowsDirectory": "C:\\Windows" + } + ] + ], + "cpu": [ + [ + { + "AddressWidth": 64 + }, + { + "Architecture": 9 + }, + { + "AssetTag": "Unknown" + }, + { + "Availability": 3 + }, + { + "Caption": "AMD64 Family 23 Model 113 Stepping 0" + }, + { + "Characteristics": 252 + }, + { + "CpuStatus": 1 + }, + { + "CreationClassName": "Win32_Processor" + }, + { + "CurrentClockSpeed": 3793 + }, + { + "CurrentVoltage": 11 + }, + { + "DataWidth": 64 + }, + { + "Description": "AMD64 Family 23 Model 113 Stepping 0" + }, + { + "DeviceID": "CPU0" + }, + { + "ExtClock": 100 + }, + { + "Family": 107 + }, + { + "L2CacheSize": 6144 + }, + { + "L3CacheSize": 65536 + }, + { + "L3CacheSpeed": 0 + }, + { + "Level": 23 + }, + { + "LoadPercentage": 1 + }, + { + "Manufacturer": "AuthenticAMD" + }, + { + "MaxClockSpeed": 3793 + }, + { + "Name": "AMD Ryzen 9 3900X 12-Core Processor " + }, + { + "NumberOfCores": 12 + }, + { + "NumberOfEnabledCore": 12 + }, + { + "NumberOfLogicalProcessors": 24 + }, + { + "PartNumber": "Unknown" + }, + { + "PowerManagementSupported": false + }, + { + "ProcessorId": "178BFBFF00870F10" + }, + { + "ProcessorType": 3 + }, + { + "Revision": 28928 + }, + { + "Role": "CPU" + }, + { + "SecondLevelAddressTranslationExtensions": false + }, + { + "SerialNumber": "Unknown" + }, + { + "SocketDesignation": "AM4" + }, + { + "Status": "OK" + }, + { + "StatusInfo": 3 + }, + { + "Stepping": "0" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "ThreadCount": 24 + }, + { + "UpgradeMethod": 49 + }, + { + "Version": "Model 1, Stepping 0" + }, + { + "VirtualizationFirmwareEnabled": true + }, + { + "VMMonitorModeExtensions": false + } + ] + ], + "mem": [ + [ + { + "Attributes": 2 + }, + { + "BankLabel": "P0 CHANNEL A" + }, + { + "Capacity": "34359738368" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "DIMM 0" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "Unknown" + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "CMK64GX4M2D3000C16" + }, + { + "SerialNumber": "00000000" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2133 + }, + { + "Tag": "Physical Memory 0" + }, + { + "TotalWidth": 64 + }, + { + "TypeDetail": 16512 + } + ], + [ + { + "Attributes": 2 + }, + { + "BankLabel": "P0 CHANNEL A" + }, + { + "Capacity": "34359738368" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "DIMM 1" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "Unknown" + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "CMK64GX4M2D3000C16" + }, + { + "SerialNumber": "00000000" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2133 + }, + { + "Tag": "Physical Memory 1" + }, + { + "TotalWidth": 64 + }, + { + "TypeDetail": 16512 + } + ], + [ + { + "Attributes": 2 + }, + { + "BankLabel": "P0 CHANNEL B" + }, + { + "Capacity": "34359738368" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "DIMM 0" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "Unknown" + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "CMK64GX4M2D3000C16" + }, + { + "SerialNumber": "00000000" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2133 + }, + { + "Tag": "Physical Memory 2" + }, + { + "TotalWidth": 64 + }, + { + "TypeDetail": 16512 + } + ], + [ + { + "Attributes": 2 + }, + { + "BankLabel": "P0 CHANNEL B" + }, + { + "Capacity": "34359738368" + }, + { + "Caption": "Physical Memory" + }, + { + "ConfiguredClockSpeed": 2133 + }, + { + "ConfiguredVoltage": 1200 + }, + { + "CreationClassName": "Win32_PhysicalMemory" + }, + { + "DataWidth": 64 + }, + { + "Description": "Physical Memory" + }, + { + "DeviceLocator": "DIMM 1" + }, + { + "FormFactor": 8 + }, + { + "Manufacturer": "Unknown" + }, + { + "MaxVoltage": 1200 + }, + { + "MemoryType": 0 + }, + { + "MinVoltage": 1200 + }, + { + "Name": "Physical Memory" + }, + { + "PartNumber": "CMK64GX4M2D3000C16" + }, + { + "SerialNumber": "00000000" + }, + { + "SMBIOSMemoryType": 26 + }, + { + "Speed": 2133 + }, + { + "Tag": "Physical Memory 3" + }, + { + "TotalWidth": 64 + }, + { + "TypeDetail": 16512 + } + ] + ], + "usb": [ + [ + { + "Caption": "AMD USB 3.10 eXtensible Host Controller - 1.10 (Microsoft)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_USBController" + }, + { + "Description": "USB xHCI Compliant Host Controller" + }, + { + "DeviceID": "PCI\\VEN_1022&DEV_149C&SUBSYS_14861022&REV_00\\6&1EA5F98D&0&0140000A" + }, + { + "Manufacturer": "Generic USB xHCI Host Controller" + }, + { + "Name": "AMD USB 3.10 eXtensible Host Controller - 1.10 (Microsoft)" + }, + { + "PNPDeviceID": "PCI\\VEN_1022&DEV_149C&SUBSYS_14861022&REV_00\\6&1EA5F98D&0&0140000A" + }, + { + "ProtocolSupported": 16 + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + } + ], + [ + { + "Caption": "AMD USB 3.10 eXtensible Host Controller - 1.10 (Microsoft)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_USBController" + }, + { + "Description": "USB xHCI Compliant Host Controller" + }, + { + "DeviceID": "PCI\\VEN_1022&DEV_149C&SUBSYS_50071458&REV_00\\4&1FDE7688&0&0341" + }, + { + "Manufacturer": "Generic USB xHCI Host Controller" + }, + { + "Name": "AMD USB 3.10 eXtensible Host Controller - 1.10 (Microsoft)" + }, + { + "PNPDeviceID": "PCI\\VEN_1022&DEV_149C&SUBSYS_50071458&REV_00\\4&1FDE7688&0&0341" + }, + { + "ProtocolSupported": 16 + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + } + ], + [ + { + "Caption": "AMD USB 3.10 eXtensible Host Controller - 1.10 (Microsoft)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_USBController" + }, + { + "Description": "USB xHCI Compliant Host Controller" + }, + { + "DeviceID": "PCI\\VEN_1022&DEV_149C&SUBSYS_148C1022&REV_00\\6&1EA5F98D&0&0340000A" + }, + { + "Manufacturer": "Generic USB xHCI Host Controller" + }, + { + "Name": "AMD USB 3.10 eXtensible Host Controller - 1.10 (Microsoft)" + }, + { + "PNPDeviceID": "PCI\\VEN_1022&DEV_149C&SUBSYS_148C1022&REV_00\\6&1EA5F98D&0&0340000A" + }, + { + "ProtocolSupported": 16 + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + } + ] + ], + "bios": [ + [ + { + "BiosCharacteristics": [ + 7, + 11, + 12, + 15, + 16, + 17, + 19, + 23, + 24, + 25, + 26, + 28, + 29, + 32, + 33, + 40, + 42, + 43 + ] + }, + { + "BIOSVersion": [ + "ALASKA - 1072009", + "F11", + "American Megatrends - 5000E" + ] + }, + { + "Caption": "F11" + }, + { + "CurrentLanguage": "en|US|iso8859-1" + }, + { + "Description": "F11" + }, + { + "EmbeddedControllerMajorVersion": 255 + }, + { + "EmbeddedControllerMinorVersion": 255 + }, + { + "InstallableLanguages": 15 + }, + { + "ListOfLanguages": [ + "en|US|iso8859-1", + "zh|TW|unicode", + "zh|CN|unicode", + "ru|RU|iso8859-5", + "de|DE|iso8859-1", + "ja|JP|unicode", + "ko|KR|unicode", + "es|ES|iso8859-1", + "fr|FR|iso8859-1", + "it|IT|iso8859-1", + "pt|PT|iso8859-1", + "vi|VI|iso8859-1", + "id|ID|iso8859-1", + "tr|TR|iso8859-1", + "pl|PL|iso8859-1" + ] + }, + { + "Manufacturer": "American Megatrends Inc." + }, + { + "Name": "F11" + }, + { + "PrimaryBIOS": true + }, + { + "ReleaseDate": "20191206000000.000000+000" + }, + { + "SerialNumber": "Default string" + }, + { + "SMBIOSBIOSVersion": "F11" + }, + { + "SMBIOSMajorVersion": 3 + }, + { + "SMBIOSMinorVersion": 2 + }, + { + "SMBIOSPresent": true + }, + { + "SoftwareElementID": "F11" + }, + { + "SoftwareElementState": 3 + }, + { + "Status": "OK" + }, + { + "SystemBiosMajorVersion": 5 + }, + { + "SystemBiosMinorVersion": 14 + }, + { + "TargetOperatingSystem": 0 + }, + { + "Version": "ALASKA - 1072009" + } + ] + ], + "disk": [ + [ + { + "BytesPerSector": 512 + }, + { + "Capabilities": [ + 3, + 4 + ] + }, + { + "CapabilityDescriptions": [ + "Random Access", + "Supports Writing" + ] + }, + { + "Caption": "Microsoft Storage Space Device" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_DiskDrive" + }, + { + "Description": "Disk drive" + }, + { + "DeviceID": "\\\\.\\PHYSICALDRIVE5" + }, + { + "FirmwareRevision": "0.1" + }, + { + "Index": 5 + }, + { + "InterfaceType": "SCSI" + }, + { + "Manufacturer": "(Standard disk drives)" + }, + { + "MediaLoaded": true + }, + { + "MediaType": "Fixed hard disk media" + }, + { + "Model": "Microsoft Storage Space Device" + }, + { + "Name": "\\\\.\\PHYSICALDRIVE5" + }, + { + "Partitions": 1 + }, + { + "PNPDeviceID": "STORAGE\\DISK\\{1AD24CEE-DC2A-4A4D-A3A3-FDD0A25BFE07}" + }, + { + "SCSIBus": 0 + }, + { + "SCSILogicalUnit": 1 + }, + { + "SCSIPort": 0 + }, + { + "SCSITargetId": 0 + }, + { + "SectorsPerTrack": 63 + }, + { + "SerialNumber": "123456" + }, + { + "Size": "2040107973120" + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TotalCylinders": "248029" + }, + { + "TotalHeads": 255 + }, + { + "TotalSectors": "3984585885" + }, + { + "TotalTracks": "63247395" + }, + { + "TracksPerCylinder": 255 + } + ], + [ + { + "BytesPerSector": 512 + }, + { + "Capabilities": [ + 3, + 4, + 10 + ] + }, + { + "CapabilityDescriptions": [ + "Random Access", + "Supports Writing", + "SMART Notification" + ] + }, + { + "Caption": "WDC WD60EFRX-68MYMN1" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_DiskDrive" + }, + { + "Description": "Disk drive" + }, + { + "DeviceID": "\\\\.\\PHYSICALDRIVE0" + }, + { + "FirmwareRevision": "82.00A82" + }, + { + "Index": 0 + }, + { + "InterfaceType": "IDE" + }, + { + "Manufacturer": "(Standard disk drives)" + }, + { + "MediaLoaded": true + }, + { + "MediaType": "Fixed hard disk media" + }, + { + "Model": "WDC WD60EFRX-68MYMN1" + }, + { + "Name": "\\\\.\\PHYSICALDRIVE0" + }, + { + "Partitions": 1 + }, + { + "PNPDeviceID": "SCSI\\DISK&VEN_WDC&PROD_WD60EFRX-68MYMN1\\7&2E1550D9&0&000000" + }, + { + "SCSIBus": 0 + }, + { + "SCSILogicalUnit": 0 + }, + { + "SCSIPort": 1 + }, + { + "SCSITargetId": 0 + }, + { + "SectorsPerTrack": 63 + }, + { + "SerialNumber": "WD-123456" + }, + { + "Size": "6001172513280" + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TotalCylinders": "729601" + }, + { + "TotalHeads": 255 + }, + { + "TotalSectors": "11721040065" + }, + { + "TotalTracks": "186048255" + }, + { + "TracksPerCylinder": 255 + } + ], + [ + { + "BytesPerSector": 512 + }, + { + "Capabilities": [ + 3, + 4, + 10 + ] + }, + { + "CapabilityDescriptions": [ + "Random Access", + "Supports Writing", + "SMART Notification" + ] + }, + { + "Caption": "Samsung SSD 860 EVO 500GB" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_DiskDrive" + }, + { + "Description": "Disk drive" + }, + { + "DeviceID": "\\\\.\\PHYSICALDRIVE1" + }, + { + "FirmwareRevision": "RVT04B6Q" + }, + { + "Index": 1 + }, + { + "InterfaceType": "IDE" + }, + { + "Manufacturer": "(Standard disk drives)" + }, + { + "MediaLoaded": true + }, + { + "MediaType": "Fixed hard disk media" + }, + { + "Model": "Samsung SSD 860 EVO 500GB" + }, + { + "Name": "\\\\.\\PHYSICALDRIVE1" + }, + { + "Partitions": 3 + }, + { + "PNPDeviceID": "SCSI\\DISK&VEN_SAMSUNG&PROD_SSD_860_EVO_500G\\7&2E1550D9&0&010000" + }, + { + "SCSIBus": 1 + }, + { + "SCSILogicalUnit": 0 + }, + { + "SCSIPort": 1 + }, + { + "SCSITargetId": 0 + }, + { + "SectorsPerTrack": 63 + }, + { + "SerialNumber": "123456" + }, + { + "Size": "500105249280" + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TotalCylinders": "60801" + }, + { + "TotalHeads": 255 + }, + { + "TotalSectors": "976768065" + }, + { + "TotalTracks": "15504255" + }, + { + "TracksPerCylinder": 255 + } + ] + ], + "comp_sys": [ + [ + { + "AdminPasswordStatus": 3 + }, + { + "AutomaticManagedPagefile": true + }, + { + "AutomaticResetBootOption": true + }, + { + "AutomaticResetCapability": true + }, + { + "BootROMSupported": true + }, + { + "BootStatus": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + { + "BootupState": "Normal boot" + }, + { + "Caption": "VMHOST-123456" + }, + { + "ChassisBootupState": 3 + }, + { + "ChassisSKUNumber": "Default string" + }, + { + "CreationClassName": "Win32_ComputerSystem" + }, + { + "CurrentTimeZone": -420 + }, + { + "DaylightInEffect": true + }, + { + "Description": "AT/AT COMPATIBLE" + }, + { + "DNSHostName": "VMHOST-123456" + }, + { + "Domain": "WORKGROUP" + }, + { + "DomainRole": 2 + }, + { + "EnableDaylightSavingsTime": true + }, + { + "FrontPanelResetStatus": 3 + }, + { + "HypervisorPresent": true + }, + { + "InfraredSupported": false + }, + { + "KeyboardPasswordStatus": 3 + }, + { + "Manufacturer": "Gigabyte Technology Co., Ltd." + }, + { + "Model": "X570 AORUS ULTRA" + }, + { + "Name": "VMHOST-123456" + }, + { + "NetworkServerModeEnabled": true + }, + { + "NumberOfLogicalProcessors": 24 + }, + { + "NumberOfProcessors": 1 + }, + { + "OEMStringArray": [ + "Default string" + ] + }, + { + "PartOfDomain": false + }, + { + "PauseAfterReset": "-1" + }, + { + "PCSystemType": 1 + }, + { + "PCSystemTypeEx": 1 + }, + { + "PowerOnPasswordStatus": 3 + }, + { + "PowerState": 0 + }, + { + "PowerSupplyState": 3 + }, + { + "PrimaryOwnerName": "Windows User" + }, + { + "ResetCapability": 1 + }, + { + "ResetCount": -1 + }, + { + "ResetLimit": -1 + }, + { + "Roles": [ + "LM_Workstation", + "LM_Server", + "NT", + "Server_NT" + ] + }, + { + "Status": "OK" + }, + { + "SystemFamily": "Default string" + }, + { + "SystemSKUNumber": "Default string" + }, + { + "SystemType": "x64-based PC" + }, + { + "ThermalState": 3 + }, + { + "TotalPhysicalMemory": "137385967616" + }, + { + "WakeUpType": 6 + }, + { + "Workgroup": "WORKGROUP" + } + ] + ], + "base_board": [ + [ + { + "Caption": "Base Board" + }, + { + "ConfigOptions": [ + "Default string" + ] + }, + { + "CreationClassName": "Win32_BaseBoard" + }, + { + "Description": "Base Board" + }, + { + "HostingBoard": true + }, + { + "HotSwappable": false + }, + { + "Manufacturer": "Gigabyte Technology Co., Ltd." + }, + { + "Name": "Base Board" + }, + { + "PoweredOn": true + }, + { + "Product": "X570 AORUS ULTRA" + }, + { + "Removable": false + }, + { + "Replaceable": true + }, + { + "RequiresDaughterBoard": false + }, + { + "SerialNumber": "Default string" + }, + { + "Status": "OK" + }, + { + "Tag": "Base Board" + }, + { + "Version": "x.x" + } + ] + ], + "comp_sys_prod": [ + [ + { + "Caption": "Computer System Product" + }, + { + "Description": "Computer System Product" + }, + { + "IdentifyingNumber": "123456" + }, + { + "Name": "X570 AORUS ULTRA" + }, + { + "UUID": "123456" + }, + { + "Vendor": "Gigabyte Technology Co., Ltd." + }, + { + "Version": "-CF" + } + ] + ], + "network_config": [ + [ + { + "Caption": "[00000000] Microsoft Kernel Debug Network Adapter" + }, + { + "Description": "Microsoft Kernel Debug Network Adapter" + }, + { + "DHCPEnabled": true + }, + { + "Index": 0 + }, + { + "InterfaceIndex": 12 + }, + { + "IPEnabled": false + }, + { + "ServiceName": "kdnic" + }, + { + "SettingID": "{7C68344E-1DD8-4B8C-A839-714591D8E25C}" + } + ], + [ + { + "Caption": "[00000001] Intel(R) Gigabit ET Dual Port Server Adapter" + }, + { + "Description": "Intel(R) Gigabit ET Dual Port Server Adapter" + }, + { + "DHCPEnabled": true + }, + { + "Index": 1 + }, + { + "InterfaceIndex": 4 + }, + { + "IPEnabled": false + }, + { + "MACAddress": "6C:B3:11:1C:A9:EA" + }, + { + "ServiceName": "e1iexpress" + }, + { + "SettingID": "{29D28E82-B624-4A0D-B71B-2355B00E7D9B}" + } + ], + [ + { + "Caption": "[00000002] Intel(R) Gigabit ET Dual Port Server Adapter" + }, + { + "DatabasePath": "%SystemRoot%\\System32\\drivers\\etc" + }, + { + "DefaultIPGateway": [ + "192.168.10.1" + ] + }, + { + "Description": "Intel(R) Gigabit ET Dual Port Server Adapter #2" + }, + { + "DHCPEnabled": true + }, + { + "DHCPLeaseExpires": "20200713201124.000000-420" + }, + { + "DHCPLeaseObtained": "20200712201124.000000-420" + }, + { + "DHCPServer": "192.168.10.1" + }, + { + "DNSDomainSuffixSearchOrder": [] + }, + { + "DNSEnabledForWINSResolution": false + }, + { + "DNSHostName": "VMHOST-123456" + }, + { + "DNSServerSearchOrder": [ + "192.168.10.18", + "192.168.1.18" + ] + }, + { + "DomainDNSRegistrationEnabled": false + }, + { + "FullDNSRegistrationEnabled": true + }, + { + "GatewayCostMetric": [ + 0 + ] + }, + { + "Index": 2 + }, + { + "InterfaceIndex": 6 + }, + { + "IPAddress": [ + "192.168.10.149", + "fe80::f3:2cf2:4961:8d13" + ] + }, + { + "IPConnectionMetric": 25 + }, + { + "IPEnabled": true + }, + { + "IPFilterSecurityEnabled": false + }, + { + "IPSecPermitIPProtocols": [] + }, + { + "IPSecPermitTCPPorts": [] + }, + { + "IPSecPermitUDPPorts": [] + }, + { + "IPSubnet": [ + "255.255.255.0", + "64" + ] + }, + { + "MACAddress": "6C:B3:11:1C:A9:EB" + }, + { + "ServiceName": "e1iexpress" + }, + { + "SettingID": "{3F06220B-C096-4A4A-9573-FB344A2EC698}" + }, + { + "TcpipNetbiosOptions": 0 + }, + { + "WINSEnableLMHostsLookup": true + }, + { + "WINSScopeID": "" + } + ], + [ + { + "Caption": "[00000003] WAN Miniport (SSTP)" + }, + { + "Description": "WAN Miniport (SSTP)" + }, + { + "DHCPEnabled": false + }, + { + "Index": 3 + }, + { + "InterfaceIndex": 9 + }, + { + "IPEnabled": false + }, + { + "ServiceName": "RasSstp" + }, + { + "SettingID": "{6CA87764-F71A-42CC-B59A-32A28EBCBEF3}" + } + ], + [ + { + "Caption": "[00000004] WAN Miniport (IKEv2)" + }, + { + "Description": "WAN Miniport (IKEv2)" + }, + { + "DHCPEnabled": false + }, + { + "Index": 4 + }, + { + "InterfaceIndex": 14 + }, + { + "IPEnabled": false + }, + { + "ServiceName": "RasAgileVpn" + }, + { + "SettingID": "{94FED5A7-D831-4166-BB67-00B982CE2178}" + } + ], + [ + { + "Caption": "[00000005] WAN Miniport (L2TP)" + }, + { + "Description": "WAN Miniport (L2TP)" + }, + { + "DHCPEnabled": false + }, + { + "Index": 5 + }, + { + "InterfaceIndex": 10 + }, + { + "IPEnabled": false + }, + { + "ServiceName": "Rasl2tp" + }, + { + "SettingID": "{76D5C158-4596-4B39-9C92-5B5F06F440BC}" + } + ], + [ + { + "Caption": "[00000006] WAN Miniport (PPTP)" + }, + { + "Description": "WAN Miniport (PPTP)" + }, + { + "DHCPEnabled": false + }, + { + "Index": 6 + }, + { + "InterfaceIndex": 8 + }, + { + "IPEnabled": false + }, + { + "ServiceName": "PptpMiniport" + }, + { + "SettingID": "{6B96FDEA-4293-4B11-87FF-3EBECD19D8F7}" + } + ], + [ + { + "Caption": "[00000007] WAN Miniport (PPPOE)" + }, + { + "Description": "WAN Miniport (PPPOE)" + }, + { + "DHCPEnabled": false + }, + { + "Index": 7 + }, + { + "InterfaceIndex": 2 + }, + { + "IPEnabled": false + }, + { + "ServiceName": "RasPppoe" + }, + { + "SettingID": "{03839347-0867-4E47-8C29-8241418B3E5D}" + } + ], + [ + { + "Caption": "[00000008] WAN Miniport (GRE)" + }, + { + "Description": "WAN Miniport (GRE)" + }, + { + "DHCPEnabled": false + }, + { + "Index": 8 + }, + { + "InterfaceIndex": 7 + }, + { + "IPEnabled": false + }, + { + "ServiceName": "RasGre" + }, + { + "SettingID": "{5C698A0B-6D28-4F36-9312-5AE8254526F0}" + } + ], + [ + { + "Caption": "[00000009] WAN Miniport (IP)" + }, + { + "Description": "WAN Miniport (IP)" + }, + { + "DHCPEnabled": false + }, + { + "Index": 9 + }, + { + "InterfaceIndex": 18 + }, + { + "IPEnabled": false + }, + { + "MACAddress": "42:9F:20:52:41:53" + }, + { + "ServiceName": "NdisWan" + }, + { + "SettingID": "{EDC2CD2D-21AE-4288-9515-B291533CA32E}" + } + ], + [ + { + "Caption": "[00000010] WAN Miniport (IPv6)" + }, + { + "Description": "WAN Miniport (IPv6)" + }, + { + "DHCPEnabled": false + }, + { + "Index": 10 + }, + { + "InterfaceIndex": 16 + }, + { + "IPEnabled": false + }, + { + "MACAddress": "42:9F:20:52:41:53" + }, + { + "ServiceName": "NdisWan" + }, + { + "SettingID": "{B577201A-EA0A-4415-9113-D986CADB1F4B}" + } + ], + [ + { + "Caption": "[00000011] WAN Miniport (Network Monitor)" + }, + { + "Description": "WAN Miniport (Network Monitor)" + }, + { + "DHCPEnabled": false + }, + { + "Index": 11 + }, + { + "InterfaceIndex": 11 + }, + { + "IPEnabled": false + }, + { + "MACAddress": "44:02:20:52:41:53" + }, + { + "ServiceName": "NdisWan" + }, + { + "SettingID": "{7885E3B5-1002-4B2C-AF70-9FCE946CCF8C}" + } + ], + [ + { + "Caption": "[00000012] Hyper-V Virtual Switch Extension Adapter" + }, + { + "Description": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "DHCPEnabled": false + }, + { + "Index": 12 + }, + { + "InterfaceIndex": 17 + }, + { + "IPEnabled": false + }, + { + "ServiceName": "VMSMP" + }, + { + "SettingID": "{E9114E10-1F94-4A24-A129-2D07B40CB70A}" + } + ], + [ + { + "Caption": "[00000013] Hyper-V Virtual Ethernet Adapter" + }, + { + "DatabasePath": "%SystemRoot%\\System32\\drivers\\etc" + }, + { + "DefaultIPGateway": [ + "192.168.10.1" + ] + }, + { + "Description": "Hyper-V Virtual Ethernet Adapter" + }, + { + "DHCPEnabled": true + }, + { + "DHCPLeaseExpires": "20200713201124.000000-420" + }, + { + "DHCPLeaseObtained": "20200712201124.000000-420" + }, + { + "DHCPServer": "192.168.10.1" + }, + { + "DNSDomainSuffixSearchOrder": [] + }, + { + "DNSEnabledForWINSResolution": false + }, + { + "DNSHostName": "VMHOST-123456" + }, + { + "DNSServerSearchOrder": [ + "8.8.8.8", + "208.67.222.222" + ] + }, + { + "DomainDNSRegistrationEnabled": false + }, + { + "FullDNSRegistrationEnabled": true + }, + { + "GatewayCostMetric": [ + 0 + ] + }, + { + "Index": 13 + }, + { + "InterfaceIndex": 15 + }, + { + "IPAddress": [ + "192.168.10.114", + "fe80::c5fd:fc78:8f5a:d037" + ] + }, + { + "IPConnectionMetric": 25 + }, + { + "IPEnabled": true + }, + { + "IPFilterSecurityEnabled": false + }, + { + "IPSecPermitIPProtocols": [] + }, + { + "IPSecPermitTCPPorts": [] + }, + { + "IPSecPermitUDPPorts": [] + }, + { + "IPSubnet": [ + "255.255.255.0", + "64" + ] + }, + { + "MACAddress": "6C:B3:11:1C:A9:EA" + }, + { + "ServiceName": "VMSNPXYMP" + }, + { + "SettingID": "{965FB0D4-E52D-4131-8DA3-57EDBF70EBF7}" + }, + { + "TcpipNetbiosOptions": 0 + }, + { + "WINSEnableLMHostsLookup": true + }, + { + "WINSScopeID": "" + } + ] + ], + "desktop_monitor": [ + [ + { + "Availability": 8 + }, + { + "Caption": "Generic Non-PnP Monitor" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_DesktopMonitor" + }, + { + "Description": "Generic Non-PnP Monitor" + }, + { + "DeviceID": "DesktopMonitor1" + }, + { + "MonitorManufacturer": "(Standard monitor types)" + }, + { + "MonitorType": "Generic Non-PnP Monitor" + }, + { + "Name": "Generic Non-PnP Monitor" + }, + { + "PixelsPerXLogicalInch": 96 + }, + { + "PixelsPerYLogicalInch": 96 + }, + { + "PNPDeviceID": "DISPLAY\\DEFAULT_MONITOR\\7&2BA76299&0&UID0" + }, + { + "Status": "OK" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + } + ] + ], + "network_adapter": [ + [ + { + "Availability": 3 + }, + { + "Caption": "[00000000] Microsoft Kernel Debug Network Adapter" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Microsoft Kernel Debug Network Adapter" + }, + { + "DeviceID": "0" + }, + { + "Index": 0 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 12 + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Microsoft Kernel Debug Network Adapter" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "ROOT\\KDNIC\\0000" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Microsoft Kernel Debug Network Adapter" + }, + { + "ServiceName": "kdnic" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000001] Intel(R) Gigabit ET Dual Port Server Adapter" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Intel(R) Gigabit ET Dual Port Server Adapter" + }, + { + "DeviceID": "1" + }, + { + "GUID": "{29D28E82-B624-4A0D-B71B-2355B00E7D9B}" + }, + { + "Index": 1 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 4 + }, + { + "MACAddress": "6C:B3:11:1C:A9:EA" + }, + { + "Manufacturer": "Intel Corporation" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Intel(R) Gigabit ET Dual Port Server Adapter" + }, + { + "NetConnectionID": "Ethernet" + }, + { + "NetConnectionStatus": 2 + }, + { + "NetEnabled": true + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "PCI\\VEN_8086&DEV_10C9&SUBSYS_A03C8086&REV_01\\6CB311FFFF1CA9EA00" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Intel(R) Gigabit ET Dual Port Server Adapter" + }, + { + "ServiceName": "e1iexpress" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000002] Intel(R) Gigabit ET Dual Port Server Adapter" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Intel(R) Gigabit ET Dual Port Server Adapter" + }, + { + "DeviceID": "2" + }, + { + "GUID": "{3F06220B-C096-4A4A-9573-FB344A2EC698}" + }, + { + "Index": 2 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 6 + }, + { + "MACAddress": "6C:B3:11:1C:A9:EB" + }, + { + "Manufacturer": "Intel Corporation" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Intel(R) Gigabit ET Dual Port Server Adapter #2" + }, + { + "NetConnectionID": "Ethernet 2" + }, + { + "NetConnectionStatus": 2 + }, + { + "NetEnabled": true + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "PCI\\VEN_8086&DEV_10C9&SUBSYS_A03C8086&REV_01\\6CB311FFFF1CA9EA01" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Intel(R) Gigabit ET Dual Port Server Adapter" + }, + { + "ServiceName": "e1iexpress" + }, + { + "Speed": "1000000000" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "Availability": 3 + }, + { + "Caption": "[00000003] WAN Miniport (SSTP)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "WAN Miniport (SSTP)" + }, + { + "DeviceID": "3" + }, + { + "Index": 3 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 9 + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "WAN Miniport (SSTP)" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "SWD\\MSRRAS\\MS_SSTPMINIPORT" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "WAN Miniport (SSTP)" + }, + { + "ServiceName": "RasSstp" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "Availability": 3 + }, + { + "Caption": "[00000004] WAN Miniport (IKEv2)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "WAN Miniport (IKEv2)" + }, + { + "DeviceID": "4" + }, + { + "Index": 4 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 14 + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "WAN Miniport (IKEv2)" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "SWD\\MSRRAS\\MS_AGILEVPNMINIPORT" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "WAN Miniport (IKEv2)" + }, + { + "ServiceName": "RasAgileVpn" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "Availability": 3 + }, + { + "Caption": "[00000005] WAN Miniport (L2TP)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "WAN Miniport (L2TP)" + }, + { + "DeviceID": "5" + }, + { + "Index": 5 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 10 + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "WAN Miniport (L2TP)" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "SWD\\MSRRAS\\MS_L2TPMINIPORT" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "WAN Miniport (L2TP)" + }, + { + "ServiceName": "Rasl2tp" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "Availability": 3 + }, + { + "Caption": "[00000006] WAN Miniport (PPTP)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "WAN Miniport (PPTP)" + }, + { + "DeviceID": "6" + }, + { + "Index": 6 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 8 + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "WAN Miniport (PPTP)" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "SWD\\MSRRAS\\MS_PPTPMINIPORT" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "WAN Miniport (PPTP)" + }, + { + "ServiceName": "PptpMiniport" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "Availability": 3 + }, + { + "Caption": "[00000007] WAN Miniport (PPPOE)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "WAN Miniport (PPPOE)" + }, + { + "DeviceID": "7" + }, + { + "Index": 7 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 2 + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "WAN Miniport (PPPOE)" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "SWD\\MSRRAS\\MS_PPPOEMINIPORT" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "WAN Miniport (PPPOE)" + }, + { + "ServiceName": "RasPppoe" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "Availability": 3 + }, + { + "Caption": "[00000008] WAN Miniport (GRE)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "WAN Miniport (GRE)" + }, + { + "DeviceID": "8" + }, + { + "Index": 8 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 7 + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "WAN Miniport (GRE)" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "SWD\\MSRRAS\\MS_GREMINIPORT" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "WAN Miniport (GRE)" + }, + { + "ServiceName": "RasGre" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000009] WAN Miniport (IP)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "WAN Miniport (IP)" + }, + { + "DeviceID": "9" + }, + { + "Index": 9 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 18 + }, + { + "MACAddress": "42:9F:20:52:41:53" + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "WAN Miniport (IP)" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "SWD\\MSRRAS\\MS_NDISWANIP" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "WAN Miniport (IP)" + }, + { + "ServiceName": "NdisWan" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000010] WAN Miniport (IPv6)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "WAN Miniport (IPv6)" + }, + { + "DeviceID": "10" + }, + { + "Index": 10 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 16 + }, + { + "MACAddress": "42:9F:20:52:41:53" + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "WAN Miniport (IPv6)" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "SWD\\MSRRAS\\MS_NDISWANIPV6" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "WAN Miniport (IPv6)" + }, + { + "ServiceName": "NdisWan" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000011] WAN Miniport (Network Monitor)" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "WAN Miniport (Network Monitor)" + }, + { + "DeviceID": "11" + }, + { + "Index": 11 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 11 + }, + { + "MACAddress": "44:02:20:52:41:53" + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "WAN Miniport (Network Monitor)" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "SWD\\MSRRAS\\MS_NDISWANBH" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "WAN Miniport (Network Monitor)" + }, + { + "ServiceName": "NdisWan" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000012] Hyper-V Virtual Switch Extension Adapter" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "DeviceID": "12" + }, + { + "Index": 12 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 17 + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "PhysicalAdapter": false + }, + { + "PNPDeviceID": "ROOT\\VMS_VSMP\\0000" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Hyper-V Virtual Switch Extension Adapter" + }, + { + "ServiceName": "VMSMP" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ], + [ + { + "AdapterType": "Ethernet 802.3" + }, + { + "AdapterTypeId": 0 + }, + { + "Availability": 3 + }, + { + "Caption": "[00000013] Hyper-V Virtual Ethernet Adapter" + }, + { + "ConfigManagerErrorCode": 0 + }, + { + "ConfigManagerUserConfig": false + }, + { + "CreationClassName": "Win32_NetworkAdapter" + }, + { + "Description": "Hyper-V Virtual Ethernet Adapter" + }, + { + "DeviceID": "13" + }, + { + "GUID": "{965FB0D4-E52D-4131-8DA3-57EDBF70EBF7}" + }, + { + "Index": 13 + }, + { + "Installed": true + }, + { + "InterfaceIndex": 15 + }, + { + "MACAddress": "6C:B3:11:1C:A9:EA" + }, + { + "Manufacturer": "Microsoft" + }, + { + "MaxNumberControlled": 0 + }, + { + "Name": "Hyper-V Virtual Ethernet Adapter" + }, + { + "NetConnectionID": "vEthernet (shared1)" + }, + { + "NetConnectionStatus": 2 + }, + { + "NetEnabled": true + }, + { + "PhysicalAdapter": true + }, + { + "PNPDeviceID": "ROOT\\VMS_MP\\0000" + }, + { + "PowerManagementSupported": false + }, + { + "ProductName": "Hyper-V Virtual Ethernet Adapter" + }, + { + "ServiceName": "VMSNPXYMP" + }, + { + "Speed": "1000000000" + }, + { + "SystemCreationClassName": "Win32_ComputerSystem" + }, + { + "SystemName": "VMHOST-123456" + }, + { + "TimeOfLastReset": "20200511200945.500000-420" + } + ] + ] +} \ No newline at end of file diff --git a/api/tacticalrmm/tacticalrmm/urls.py b/api/tacticalrmm/tacticalrmm/urls.py index bb9762edf1..1c138f8659 100644 --- a/api/tacticalrmm/tacticalrmm/urls.py +++ b/api/tacticalrmm/tacticalrmm/urls.py @@ -37,6 +37,10 @@ def to_url(self, value): path("scripts/", include("scripts.urls")), path("alerts/", include("alerts.urls")), path("accounts/", include("accounts.urls")), + path("integrations/", include("integrations.urls")), + path("meraki/", include("integrations.meraki.urls")), + path("snipeit/", include("integrations.snipeit.urls")), + path("bitdefender/", include("integrations.bitdefender.urls")), ] if getattr(settings, "ADMIN_ENABLED", False): diff --git a/api/tacticalrmm/tacticalrmm/utils.py b/api/tacticalrmm/tacticalrmm/utils.py index 301e095727..9f544f9e22 100644 --- a/api/tacticalrmm/tacticalrmm/utils.py +++ b/api/tacticalrmm/tacticalrmm/utils.py @@ -3,7 +3,7 @@ import subprocess import tempfile import time -from typing import Optional, Union +from typing import List, Optional, Union import pytz import requests @@ -34,6 +34,32 @@ "Saturday": 0x40, } +MONTHS = { + "January": 0x1, + "February": 0x2, + "March": 0x4, + "April": 0x8, + "May": 0x10, + "June": 0x20, + "July": 0x40, + "August": 0x80, + "September": 0x100, + "October": 0x200, + "November": 0x400, + "December": 0x800, +} + +WEEKS = { + "First Week": 0x1, + "Second Week": 0x2, + "Third Week": 0x4, + "Fourth Week": 0x8, + "Last Week": 0x10, +} + +MONTH_DAYS = {f"{b}": 0x1 << a for a, b in enumerate(range(1, 32))} +MONTH_DAYS["Last Day"] = 0x80000000 + def generate_winagent_exe( client: int, @@ -124,28 +150,57 @@ def get_bit_days(days: list[str]) -> int: def bitdays_to_string(day: int) -> str: - ret = [] + ret: List[str] = [] if day == 127: return "Every day" - if day & WEEK_DAYS["Sunday"]: - ret.append("Sunday") - if day & WEEK_DAYS["Monday"]: - ret.append("Monday") - if day & WEEK_DAYS["Tuesday"]: - ret.append("Tuesday") - if day & WEEK_DAYS["Wednesday"]: - ret.append("Wednesday") - if day & WEEK_DAYS["Thursday"]: - ret.append("Thursday") - if day & WEEK_DAYS["Friday"]: - ret.append("Friday") - if day & WEEK_DAYS["Saturday"]: - ret.append("Saturday") + for key, value in WEEK_DAYS.items(): + if day & int(value): + ret.append(key) + return ", ".join(ret) + + +def bitmonths_to_string(month: int) -> str: + ret: List[str] = [] + if month == 4095: + return "Every month" + + for key, value in MONTHS.items(): + if month & int(value): + ret.append(key) + return ", ".join(ret) + + +def bitweeks_to_string(week: int) -> str: + ret: List[str] = [] + if week == 31: + return "Every week" + + for key, value in WEEKS.items(): + if week & int(value): + ret.append(key) + return ", ".join(ret) + +def bitmonthdays_to_string(day: int) -> str: + ret: List[str] = [] + if day == 2147483647 or 4294967295: + return "Every day" + + for key, value in MONTH_DAYS.items(): + if day & int(value): + ret.append(key) return ", ".join(ret) +def convert_to_iso_duration(string: str) -> str: + tmp = string.upper() + if "D" in tmp: + return f"P{tmp.replace('D', 'DT')}" + else: + return f"PT{tmp}" + + def reload_nats(): users = [{"user": "tacticalrmm", "password": settings.SECRET_KEY}] agents = Agent.objects.prefetch_related("user").only( @@ -167,9 +222,8 @@ def reload_nats(): cert_file = f"/etc/letsencrypt/live/{domain}/fullchain.pem" key_file = f"/etc/letsencrypt/live/{domain}/privkey.pem" if hasattr(settings, "CERT_FILE") and hasattr(settings, "KEY_FILE"): - if os.path.exists(settings.CERT_FILE) and os.path.exists(settings.KEY_FILE): - cert_file = settings.CERT_FILE - key_file = settings.KEY_FILE + cert_file = settings.CERT_FILE + key_file = settings.KEY_FILE config = { "tls": { diff --git a/docker/containers/tactical-meshcentral/entrypoint.sh b/docker/containers/tactical-meshcentral/entrypoint.sh index 3e612fc19c..795432cf60 100644 --- a/docker/containers/tactical-meshcentral/entrypoint.sh +++ b/docker/containers/tactical-meshcentral/entrypoint.sh @@ -10,6 +10,7 @@ set -e : "${MONGODB_PORT:=27017}" : "${NGINX_HOST_IP:=172.20.0.20}" : "${MESH_PERSISTENT_CONFIG:=0}" +: "${WS_MASK_OVERRIDE:=0}" mkdir -p /home/node/app/meshcentral-data mkdir -p ${TACTICAL_DIR}/tmp @@ -50,7 +51,8 @@ mesh_config="$(cat << EOF "NewAccounts": false, "mstsc": true, "GeoLocation": true, - "CertUrl": "https://${NGINX_HOST_IP}:443" + "CertUrl": "https://${NGINX_HOST_IP}:443", + "agentConfig": [ "webSocketMaskOverride=${WS_MASK_OVERRIDE}" ] } } } diff --git a/docker/containers/tactical-nats/dockerfile b/docker/containers/tactical-nats/dockerfile index 45ac4494e6..834419611d 100644 --- a/docker/containers/tactical-nats/dockerfile +++ b/docker/containers/tactical-nats/dockerfile @@ -1,4 +1,4 @@ -FROM nats:2.3.3-alpine +FROM nats:2.6.6-alpine ENV TACTICAL_DIR /opt/tactical ENV TACTICAL_READY_FILE ${TACTICAL_DIR}/tmp/tactical.ready diff --git a/docker/containers/tactical-nginx/entrypoint.sh b/docker/containers/tactical-nginx/entrypoint.sh index f630337227..528b595047 100644 --- a/docker/containers/tactical-nginx/entrypoint.sh +++ b/docker/containers/tactical-nginx/entrypoint.sh @@ -5,10 +5,15 @@ set -e : "${WORKER_CONNECTIONS:=2048}" : "${APP_PORT:=80}" : "${API_PORT:=80}" +: "${NGINX_RESOLVER:=127.0.0.11}" +: "${BACKEND_SERVICE:=tactical-backend}" +: "${FRONTEND_SERVICE:=tactical-frontend}" +: "${MESH_SERVICE:=tactical-meshcentral}" +: "${WEBSOCKETS_SERVICE:=tactical-websockets}" : "${DEV:=0}" -CERT_PRIV_PATH=${TACTICAL_DIR}/certs/privkey.pem -CERT_PUB_PATH=${TACTICAL_DIR}/certs/fullchain.pem +: "${CERT_PRIV_PATH:=${TACTICAL_DIR}/certs/privkey.pem}" +: "${CERT_PUB_PATH:=${TACTICAL_DIR}/certs/fullchain.pem}" mkdir -p "${TACTICAL_DIR}/certs" @@ -34,7 +39,7 @@ fi if [[ $DEV -eq 1 ]]; then API_NGINX=" #Using variable to disable start checks - set \$api http://tactical-backend:${API_PORT}; + set \$api http://${BACKEND_SERVICE}:${API_PORT}; proxy_pass \$api; proxy_http_version 1.1; proxy_cache_bypass \$http_upgrade; @@ -51,7 +56,7 @@ if [[ $DEV -eq 1 ]]; then else API_NGINX=" #Using variable to disable start checks - set \$api tactical-backend:${API_PORT}; + set \$api ${BACKEND_SERVICE}:${API_PORT}; include uwsgi_params; uwsgi_pass \$api; @@ -61,7 +66,7 @@ fi nginx_config="$(cat << EOF # backend config server { - resolver 127.0.0.11 valid=30s; + resolver ${NGINX_RESOLVER} valid=30s; server_name ${API_HOST}; @@ -80,7 +85,7 @@ server { } location ~ ^/ws/ { - set \$api http://tactical-websockets:8383; + set \$api http://${WEBSOCKETS_SERVICE}:8383; proxy_pass \$api; proxy_http_version 1.1; @@ -111,13 +116,13 @@ server { # frontend config server { - resolver 127.0.0.11 valid=30s; + resolver ${NGINX_RESOLVER} valid=30s; server_name ${APP_HOST}; location / { #Using variable to disable start checks - set \$app http://tactical-frontend:${APP_PORT}; + set \$app http://${FRONTEND_SERVICE}:${APP_PORT}; proxy_pass \$app; proxy_http_version 1.1; @@ -149,7 +154,7 @@ server { # meshcentral config server { - resolver 127.0.0.11 valid=30s; + resolver ${NGINX_RESOLVER} valid=30s; listen 443 ssl; proxy_send_timeout 330s; @@ -163,7 +168,11 @@ server { location / { #Using variable to disable start checks - set \$meshcentral http://tactical-meshcentral:443; +<<<<<<< HEAD + set \$meshcentral http://{$MESH_SERVICE}:443; +======= + set \$meshcentral http://${MESH_SERVICE}:443; +>>>>>>> 2c9d413a1a0d4d3715ac77ea408c94d156899e83 proxy_pass \$meshcentral; proxy_http_version 1.1; @@ -180,7 +189,7 @@ server { } server { - resolver 127.0.0.11 valid=30s; + resolver ${NGINX_RESOLVER} valid=30s; listen 80; server_name ${MESH_HOST}; diff --git a/docker/containers/tactical/entrypoint.sh b/docker/containers/tactical/entrypoint.sh index 3498694551..61fffe1dc0 100644 --- a/docker/containers/tactical/entrypoint.sh +++ b/docker/containers/tactical/entrypoint.sh @@ -9,7 +9,8 @@ set -e : "${POSTGRES_USER:=tactical}" : "${POSTGRES_PASS:=tactical}" : "${POSTGRES_DB:=tacticalrmm}" -: "${MESH_CONTAINER:=tactical-meshcentral}" +: "${MESH_SERVICE:=tactical-meshcentral}" +: "${MESH_WS_URL:=ws://${MESH_SERVICE}:443}" : "${MESH_USER:=meshcentral}" : "${MESH_PASS:=meshcentralpass}" : "${MESH_HOST:=tactical-meshcentral}" @@ -17,6 +18,8 @@ set -e : "${APP_HOST:=tactical-frontend}" : "${REDIS_HOST:=tactical-redis}" +: "${CERT_PRIV_PATH:=${TACTICAL_DIR}/certs/privkey.pem}" +: "${CERT_PUB_PATH:=${TACTICAL_DIR}/certs/fullchain.pem}" function check_tactical_ready { sleep 15 @@ -44,7 +47,7 @@ if [ "$1" = 'tactical-init' ]; then sleep 5 done - until (echo > /dev/tcp/"${MESH_CONTAINER}"/443) &> /dev/null; do + until (echo > /dev/tcp/"${MESH_SERVICE}"/443) &> /dev/null; do echo "waiting for meshcentral container to be ready..." sleep 5 done @@ -61,8 +64,8 @@ DEBUG = False DOCKER_BUILD = True -CERT_FILE = '/opt/tactical/certs/fullchain.pem' -KEY_FILE = '/opt/tactical/certs/privkey.pem' +CERT_FILE = '${CERT_PUB_PATH}' +KEY_FILE = '${CERT_PRIV_PATH}' EXE_DIR = '/opt/tactical/api/tacticalrmm/private/exe' LOG_DIR = '/opt/tactical/api/tacticalrmm/private/log' @@ -92,7 +95,7 @@ MESH_USERNAME = '${MESH_USER}' MESH_SITE = 'https://${MESH_HOST}' MESH_TOKEN_KEY = '${MESH_TOKEN}' REDIS_HOST = '${REDIS_HOST}' -MESH_WS_URL = 'ws://${MESH_CONTAINER}:443' +MESH_WS_URL = '${MESH_WS_URL}' ADMIN_ENABLED = False EOF )" diff --git a/docs/docs/3rdparty_screenconnect.md b/docs/docs/3rdparty_screenconnect.md index 5ae8718be9..539eb66885 100644 --- a/docs/docs/3rdparty_screenconnect.md +++ b/docs/docs/3rdparty_screenconnect.md @@ -42,7 +42,7 @@ Navigate to an agent with ConnectWise Service running (or apply using **Settings Go to Tasks.
Add Task
**Select Script** = `ScreenConnect - Get GUID for client` (this is a builtin script from script library)
-**Script argument** = `-serviceName{{client.ScreenConnectService}}`
+**Script argument** = `-serviceName {{client.ScreenConnectService}}`
**Descriptive name of task** = `Collects the Machine GUID for ScreenConnect.`
**Collector Task** = `CHECKED`
**Custom Field to update** = `ScreenConectGUID`
diff --git a/docs/docs/av.md b/docs/docs/av.md new file mode 100644 index 0000000000..af39555935 --- /dev/null +++ b/docs/docs/av.md @@ -0,0 +1,27 @@ +## Bitdefender Gravityzone + +Admin URL: + +To exclude URLs: Policies > {policy name} > Network Protection > Content Control > Settings > Exclusions + +![Web Exclusions](images/avbitdefender_gravityzone_exclusions0.png) + +![Web Exclusions](images/avbitdefender_gravityzone_exclusions1.png) + +![Web Exclusions](images/avbitdefender_gravityzone_exclusions2.png) + +## Webroot + +Admin URL: + +![Web Exclusions](images/avwebroot.png) + +![Web Exclusions](images/avwebroot5.png) + +![Web Exclusions](images/avwebroot4.png) + +![Web Exclusions](images/avwebroot3.png) + +![Web Exclusions](images/avwebroot2.png) + +![Web Exclusions](images/avwebroot1.png) diff --git a/docs/docs/backup.md b/docs/docs/backup.md index 7bf364c79c..50faa0ed79 100644 --- a/docs/docs/backup.md +++ b/docs/docs/backup.md @@ -1,4 +1,4 @@ -# Backing up the RMM +## Backing up the RMM !!!note This is only applicable for the standard install, not Docker installs. @@ -28,7 +28,7 @@ The backup tar file will be saved in `/rmmbackups` with the following format: `rmm-backup-CURRENTDATETIME.tar` -# Schedule to run daily via cron +## Schedule to run daily via cron Make a symlink in `/etc/cron.d` (daily cron jobs) with these contents `00 18 * * * tactical /rmm/backup.sh` to run at 6pm daily. @@ -40,7 +40,7 @@ sudo ln -s /rmm/backup.sh /etc/cron.daily/ !!!warning Currently the backup script doesn't have any pruning functions so the folder will grow forever without periodic cleanup -# Video Walkthru +## Video Walkthru
diff --git a/docs/docs/faq.md b/docs/docs/faq.md index a3e80874f5..9d03fa051e 100644 --- a/docs/docs/faq.md +++ b/docs/docs/faq.md @@ -4,6 +4,20 @@ No +## Why isn't the agent source available? + + + +It's one of those "this is why we can't have nice things". Unfortunately there are a ton of shady people out there only looking to steal and make a profit off of someone else's work and they tried very hard with tactical. + +## Why isn't the Code Signing free? + +It's one way we're trying to monetize and get dev's paid. We had github sponsors up for many months before code signing. Very few people donated, some $5 and $10. maybe $40 a month. Once we announced code signing, sponsors came in like crazy, and many people upgraded their $5 to a $50 so while I would like to believe people would gladly donate, that's just not the case. We already tried. + +## Who is Amidaware LLC? + +The Legal entity behind Tactical RMM + ## Is it possible to use XXX with Tactical RMM While it _may be possible_ to use XXX, we have not configured it and therefore it is [Unsupported](../unsupported_guidelines). We cannot help you configure XXX as it pertains to **your environment**. diff --git a/docs/docs/functions/api.md b/docs/docs/functions/api.md index 52b7b8d670..48055967ea 100644 --- a/docs/docs/functions/api.md +++ b/docs/docs/functions/api.md @@ -1,4 +1,4 @@ -# API Access +## API Access *Version added: v0.8.3* @@ -23,3 +23,16 @@ Example curl request: curl https://api.example.com/clients/clients/ -H "X-API-KEY: Y57BXCFAA9WBCXH0XTEL6R5KAK69CNCZ" ``` +## Enable Swagger + +This will let you add a browser interface to see how you can use the api better. + +Open `/rmm/api/tacticalrmm/tacticalrmm/local_settings.py` and add + +```conf +SWAGGER_ENABLED = True +``` + +Restart django: `sudo systemctl restart rmm` + +Then visit `https://api.example.com/api/schema/swagger-ui/` to see it in action. diff --git a/docs/docs/functions/scripting.md b/docs/docs/functions/scripting.md index 808b3f1b5b..8bdb404adc 100644 --- a/docs/docs/functions/scripting.md +++ b/docs/docs/functions/scripting.md @@ -7,6 +7,7 @@ Tactical RMM supports uploading existing scripts or adding new scripts right in - Python ## Adding Scripts + In the dashboard, browse to **Settings > Scripts Manager**. Click the **New** button and select either Upload Script or New Script. The available options for scripts are: - **Name** - This identifies the script in the dashboard @@ -16,7 +17,7 @@ In the dashboard, browse to **Settings > Scripts Manager**. Click the **New** bu - Powershell - Windows Batch - Python -- **Script Arguments** - Optional way to set default arguments for scripts. These will autopopulate when running scripts and can be changed at runtime. +- **Script Arguments** - Optional way to set default arguments for scripts. These will auto populate when running scripts and can be changed at runtime. - **Default Timeout** - Sets the default timeout of the script and will stop script execution if the duration surpasses the configured timeout. Can be changed at script runtime - **Favorite** - Favorites the script. @@ -26,7 +27,7 @@ To download a Tactical RMM Script, click on the script in the Script Manager to ## Community Scripts -These are script that are built into Tactical RMM. They are provided and mantained by the Tactical RMM community. These scripts are updated whenever Tactical RMM is updated and can't be modified or deleted in the dashboard. +These are script that are built into Tactical RMM. They are provided and maintained by the Tactical RMM community. These scripts are updated whenever Tactical RMM is updated and can't be modified or deleted in the dashboard. ### Hiding Community Scripts You can choose to hide community script throughout the dashboard by opening **Script Manager** and clicking the **Show/Hide Community Scripts** toggle button. @@ -43,7 +44,9 @@ In the **Agent Table**, you can right-click on an agent and select **Run Script* - **Save as Note** - Saves the output as a Note that can be views in the agent Notes tab - **Collector** - Saves to output to the specified custom field. -There is also an option on the agent context menu called **Run Favorited Script**. This will essentially Fire and Forget the script with default args and timeout. +There is also an option on the agent context menu called **Run Favorited Script**. This will pre-populate the script run dialog with the script of your choice. + +[Script Execution Process](../../howitallworks/#windows-agent) ### Script Arguments @@ -62,7 +65,7 @@ and `()` indicates a default parameter if none is specified ### Bulk Run on agents -There is also an option on the agent context menu called **Run Favorited Script**. +Under the tools menu -> Run Bulk Script you can execute scripts against Clients/Sites/Selected Agents/All based on All/Servers/Workstations ### Automated Tasks @@ -93,7 +96,7 @@ Tactical RMM allows passing in dashboard data to scripts as arguments. The below !!!info Everything between {{}} is CaSe sEnSiTive -See a full list of available options [Here](../script_variables.md) +See a full list of possible built-in variables [Here](../script_variables.md) ### Getting Custom Field values diff --git a/docs/docs/howitallworks.md b/docs/docs/howitallworks.md index 602a2a19f9..f9f8dba625 100644 --- a/docs/docs/howitallworks.md +++ b/docs/docs/howitallworks.md @@ -19,6 +19,20 @@ Has a postgres database located here: All Tactical RMM dependencies are listed [here](https://github.com/wh1te909/tacticalrmm/blob/develop/api/tacticalrmm/requirements.txt) +### Outbound Firewall Rules + +If you have strict firewall rules these are the only outbound rules from the server needed for all functionality: + +1. Outbound traffic to all agent IP scopes for reflect traffic from agents + +#### Server without Code Signing key + +No additional rules needed + +#### Server with Code Signing key + +No additional rules needed + ### System Services This lists the system services used by the server. @@ -202,7 +216,7 @@ Built on the Django framework, the Tactical RMM service is the heart of system b #### NATS API service -The NATS API service appears to bridge the connection between the NATS server and database, allowing the agent to save (i.e. push) information in the database. +The NATS API service is a very light golang wrapper to replace traditional http requests sent to django. The agent sends the data to nats-api which is always listening for agent requests (on Port 4222). It then saves the data to postgres directly. ???+ note "systemd config" @@ -365,6 +379,14 @@ zipp==3.4.1 Found in `%programfiles%\TacticalAgent` +When scripts/checks execute, they are: + +1. transferred from the server via nats +2. saved to a randomly created file in `c:\windows\temp\trmm\` +3. executed +4. Return info is captured and returned to the server via nats +5. File in `c:\windows\temp\trmm\` are removed automatically after execution/timeout. + ### Outbound Firewall Rules If you have strict firewall rules these are the only outbound rules from the agent needed for all functionality: diff --git a/docs/docs/images/3rdparty_screenconnect4.png b/docs/docs/images/3rdparty_screenconnect4.png index 62b63c1291..a119a08305 100644 Binary files a/docs/docs/images/3rdparty_screenconnect4.png and b/docs/docs/images/3rdparty_screenconnect4.png differ diff --git a/docs/docs/images/avbitdefender_gravityzone_exclusions0.png b/docs/docs/images/avbitdefender_gravityzone_exclusions0.png new file mode 100644 index 0000000000..cbe2bd26c8 Binary files /dev/null and b/docs/docs/images/avbitdefender_gravityzone_exclusions0.png differ diff --git a/docs/docs/images/avbitdefender_gravityzone_exclusions1.png b/docs/docs/images/avbitdefender_gravityzone_exclusions1.png new file mode 100644 index 0000000000..1d7a7fe8d8 Binary files /dev/null and b/docs/docs/images/avbitdefender_gravityzone_exclusions1.png differ diff --git a/docs/docs/images/avbitdefender_gravityzone_exclusions2.png b/docs/docs/images/avbitdefender_gravityzone_exclusions2.png new file mode 100644 index 0000000000..6c7613a7ce Binary files /dev/null and b/docs/docs/images/avbitdefender_gravityzone_exclusions2.png differ diff --git a/docs/docs/images/avwebroot.png b/docs/docs/images/avwebroot.png new file mode 100644 index 0000000000..d8d689ebca Binary files /dev/null and b/docs/docs/images/avwebroot.png differ diff --git a/docs/docs/images/avwebroot1.png b/docs/docs/images/avwebroot1.png new file mode 100644 index 0000000000..e74ef7331b Binary files /dev/null and b/docs/docs/images/avwebroot1.png differ diff --git a/docs/docs/images/avwebroot2.png b/docs/docs/images/avwebroot2.png new file mode 100644 index 0000000000..150a6d2bb3 Binary files /dev/null and b/docs/docs/images/avwebroot2.png differ diff --git a/docs/docs/images/avwebroot3.png b/docs/docs/images/avwebroot3.png new file mode 100644 index 0000000000..5033f0311c Binary files /dev/null and b/docs/docs/images/avwebroot3.png differ diff --git a/docs/docs/images/avwebroot4.png b/docs/docs/images/avwebroot4.png new file mode 100644 index 0000000000..175e230f54 Binary files /dev/null and b/docs/docs/images/avwebroot4.png differ diff --git a/docs/docs/images/avwebroot5.png b/docs/docs/images/avwebroot5.png new file mode 100644 index 0000000000..d03c8e6593 Binary files /dev/null and b/docs/docs/images/avwebroot5.png differ diff --git a/docs/docs/images/mesh_no_data.png b/docs/docs/images/mesh_no_data.png new file mode 100644 index 0000000000..2f1893e36d Binary files /dev/null and b/docs/docs/images/mesh_no_data.png differ diff --git a/docs/docs/install_agent.md b/docs/docs/install_agent.md index 0081c62329..69abd5e3fa 100644 --- a/docs/docs/install_agent.md +++ b/docs/docs/install_agent.md @@ -10,6 +10,7 @@ `C:\Windows\Temp\winagent-v*.exe`
`C:\Windows\Temp\trmm\*`
`C:\temp\tacticalrmm*.exe`
+ See [here for other screenshot examples](av.md) ## Dynamically generated executable @@ -135,3 +136,13 @@ You can always use this to silently uninstall agent on workstations ```cmd "C:\Program Files\TacticalAgent\unins000.exe" /VERYSILENT ``` + +## Reinstalling mesh and reconnecting to TRMM + +Run this from Send Command + +```cmd +"C:\Program Files\TacticalAgent\meshagent.exe" -fullinstall +``` + +Then use Agent Recovery | Mesh Agent and choose Recover diff --git a/docs/docs/install_server.md b/docs/docs/install_server.md index 8918b65bc8..ddae81656a 100644 --- a/docs/docs/install_server.md +++ b/docs/docs/install_server.md @@ -226,6 +226,6 @@ We've said it before, we'll say it again. - We recommend regular updates. - - Every 3 months. + - Every 2-3 months. - Do it when you update your SSL certs. diff --git a/docs/docs/script_variables.md b/docs/docs/script_variables.md index 45524de183..1416f563ab 100644 --- a/docs/docs/script_variables.md +++ b/docs/docs/script_variables.md @@ -14,7 +14,7 @@ See below for the available options. - **{{agent.plat}}** - Will show the platform example: *windows* - **{{agent.plat_release}}** - Will show the platform release - **{{agent.hostname}}** - The hostname of the agent -- **{{agent.local_ip}}** - Local IP address of agent +- **{{agent.local_ips}}** - Local IP address of agent - **{{agent.public_ip}}** - Public IP address of agent - **{{agent.agent_id}}** - agent ID in database - **{{agent.last_seen}}** - Date and Time Agent last seen diff --git a/docs/docs/support_templates/Initial questionsv2.txt b/docs/docs/support_templates/Initial questionsv2.txt index 4a0270566f..e1393bc988 100644 --- a/docs/docs/support_templates/Initial questionsv2.txt +++ b/docs/docs/support_templates/Initial questionsv2.txt @@ -8,7 +8,7 @@ Note: If you don't want to share any specific info publicly on discord you can D Server Install Specific questions: 4. What version of Ubuntu/Debian, is it a Desktop or Server 5. Are you using a real domain -6. Did letsencrypt finalise and work +6. Did letsencrypt finalize and work 7. Have you looked at the troubleshooting steps on github? https://wh1te909.github.io/tacticalrmm/troubleshooting/ 8. What kind of ssl certs? Let's Encrypt, or purchased (you're not trying to make self-signed work right?) 9. Check Expiry date of your certificates in the browser (at https://rmm.example.com ) @@ -17,3 +17,7 @@ Network Troubleshooting 10. Are you using a proxy? 11. Are you a wizard? See https://wh1te909.github.io/tacticalrmm/unsupported_guidelines/ If so, what's in the network between agent and server? + +Agent Troubleshooting +12. Is there ANY 3rd party Antivirus installed on the computer? +13. Is there any network based filtering/AV filtering? \ No newline at end of file diff --git a/docs/docs/troubleshooting.md b/docs/docs/troubleshooting.md index 7ad59ea283..0120abdd7b 100644 --- a/docs/docs/troubleshooting.md +++ b/docs/docs/troubleshooting.md @@ -204,4 +204,10 @@ Login to server with SSH and run: ```bash node /meshcentral/node_modules/meshcentral --logintokenkey -``` \ No newline at end of file +``` + +## Mesh Agent Not Connecting to server + +When agents don't show up in your mesh console (after logging into https://mesh.EXAMPLE.COM), and all data is blank. Your AV has most likely blocked the agent. + +![Mesh Not Connecting](images/mesh_no_data.png) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index ddac60362f..f1414c42f7 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -32,6 +32,7 @@ nav: - "Examples": functions/examples.md - Backup: backup.md - Restore: restore.md + - Antivirus Exclusions: av.md - Troubleshooting: troubleshooting.md - FAQ: faq.md - Management Commands: management_cmds.md diff --git a/scripts/Win_Lenovo_Driver_Updates.ps1 b/scripts/Win_Lenovo_Driver_Updates.ps1 new file mode 100644 index 0000000000..4f7c9f70ea --- /dev/null +++ b/scripts/Win_Lenovo_Driver_Updates.ps1 @@ -0,0 +1,20 @@ +<# +.SYNOPSIS + Install a third party tool to check for device drivers. It only installs drivers that can be run non-interactively and silent +.REQUIREMENTS + Lenovo device is needed +.INSTRUCTIONS + - +.NOTES + V1.0 Initial Release by https://github.com/maltekiefer +#> + +if (-not (Get-Module -ListAvailable -Name LSUClient)) { + Install-Module -Name 'LSUClient' +} + +# Install only packages that can be installed silently and non-interactively + +$updates = Get-LSUpdate | Where-Object { $_.Installer.Unattended } +$updates | Save-LSUpdate -Verbose +$updates | Install-LSUpdate -Verbose \ No newline at end of file diff --git a/scripts_wip/Win_Chocolatey_Manage_Apps_Bulkv1.2.ps1 b/scripts_wip/Win_Chocolatey_Manage_Apps_Bulkv1.2.ps1 new file mode 100644 index 0000000000..1ff6012be6 --- /dev/null +++ b/scripts_wip/Win_Chocolatey_Manage_Apps_Bulkv1.2.ps1 @@ -0,0 +1,67 @@ +<# + .SYNOPSIS + This will install multiple software items using the chocolatey if defined, with rate limiting when run with Hosts parameter + .DESCRIPTION + For installing packages using chocolatey. If you're running against more than 10, include the Hosts parameter to limit the speed. If running on more than 30 agents at a time make sure you also change the script timeout setting. + .PARAMETER Mode + 3 options: install, uninstall, or upgrade (default). + .PARAMETER Hosts + Use this to specify the number of computer(s) you're running the command on. This will dynamically introduce waits to try and minimize the chance of hitting rate limits (20/min) on the chocolatey.org site: Hosts 20 + .PARAMETER PackagesNames + Use this to specify which software to install eg: -PackagesNames googlechrome,firefox,7zip + .EXAMPLE + -Hosts 20 -PackagesNames googlechrome + .EXAMPLE + -Hosts 20 -PackagesNames googlechrome,firefox,7zip + .EXAMPLE + -Mode upgrade -Hosts 50 + .EXAMPLE + -Mode uninstall -PackagesNames googlechrome + .EXAMPLE + -Mode uninstall -PackagesNames googlechrome,firefox,7zip + .NOTES + 9/2021 v1 Initial release by @silversword411 and @bradhawkins + 11/14/2021 v1.1 Fixing typos and logic flow @silversword411 + 12/22/2021 v1.2 Adding support to install, upgrade, remove multiple packages. Switching to upgrade instead of install by default @erifkard + #> + +param ( + [Int] $Hosts = "0", + [array]$PackagesNames, + [string] $Mode = "upgrade" +) + +$ErrorCount = 0 + +if ($Mode -ne "upgrade" -and !$PackagesNames) { + write-output "No choco package name provided, please include Example: `"-PackagesNames googlechrome`" `n" + Exit 1 +} + +if ($Hosts -and $Hosts -ne "0") { + $randrange = ($Hosts + 1) * 6 + Write-Output "Calculating rnd" + Write-Output "randrange $randrange" + $rnd = Get-Random -Minimum 1 -Maximum $randrange; + Write-Output "rnd=$rnd" +} +else { + $rnd = "1" + Write-Output "rnd set to 1 manually" + Write-Output "rnd=$rnd" +} +foreach ($Package in $PackagesNames) { + if ($Mode -eq "upgrade") { + Write-Output "Starting Upgrade of $Package" + Start-Sleep -Seconds $rnd; + choco upgrade -y $Package + Write-Output "Running upgrade for $Package" + } + else { + write-output "Running install/uninstall mode $Package" + Start-Sleep -Seconds $rnd; + choco $Mode $Package -y + Exit 0 + } +} +Exit $LASTEXITCODE \ No newline at end of file diff --git a/scripts_wip/Win_User_Admin_LAPS.ps1 b/scripts_wip/Win_User_Admin_LAPS.ps1 new file mode 100644 index 0000000000..94f84ca0e0 --- /dev/null +++ b/scripts_wip/Win_User_Admin_LAPS.ps1 @@ -0,0 +1,22 @@ +# From @subz needs comments, and parameters for New Admin. Merge/consolidate with other admin Local Administrator Password Scripts if possible + +$ComputerName = (Get-CimInstance -ClassName Win32_ComputerSystem | select name).name +##################################################################### +$ChangeAdminUsername = $false +$NewAdminUsername = "LocalAdmin" +##################################################################### +add-type -AssemblyName System.Web +$LocalAdminPassword = [System.Web.Security.Membership]::GeneratePassword(24, 5) +If ($ChangeAdminUsername -eq $false) { + Get-LocalUser -Name "Administrator" | Enable-LocalUser + Set-LocalUser -name "Administrator" -Password ($LocalAdminPassword | ConvertTo-SecureString -AsPlainText -Force) -PasswordNeverExpires:$true +} +else { + New-LocalUser -Name $NewAdminUsername -Password ($LocalAdminPassword | ConvertTo-SecureString -AsPlainText -Force) -PasswordNeverExpires:$true + Add-LocalGroupMember -Group Administrators -Member $NewAdminUsername + Disable-LocalUser -Name "Administrator" +} +if ($ChangeAdminUsername -eq $false ) { $username = "Administrator" } else { $Username = $NewAdminUsername } +write-host "The $($Username) account has been enabled on $($ComputerName) and a new password has been set:" +write-host "$($ComputerName)\$($Username)" +write-host "$($LocalAdminPassword)" \ No newline at end of file diff --git a/update.sh b/update.sh index 42d81c184c..ba17279ac7 100644 --- a/update.sh +++ b/update.sh @@ -1,6 +1,6 @@ #!/bin/bash -SCRIPT_VERSION="127" +SCRIPT_VERSION="128" SCRIPT_URL='https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/update.sh' LATEST_SETTINGS_URL='https://raw.githubusercontent.com/wh1te909/tacticalrmm/master/api/tacticalrmm/tacticalrmm/settings.py' YELLOW='\033[1;33m' @@ -174,6 +174,8 @@ if ! [[ $CHECK_NGINX_WORKER_CONN ]]; then sudo sed -i 's/worker_connections.*/worker_connections 2048;/g' /etc/nginx/nginx.conf fi +sudo sed -i 's/# server_names_hash_bucket_size.*/server_names_hash_bucket_size 64;/g' /etc/nginx/nginx.conf + HAS_PY39=$(which python3.9) if ! [[ $HAS_PY39 ]]; then printf >&2 "${GREEN}Updating to Python 3.9${NC}\n" diff --git a/web/package-lock.json b/web/package-lock.json index 31c214f240..219dc46af1 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -13,13 +13,14 @@ "axios": "^0.24.0", "dotenv": "^8.6.0", "qrcode.vue": "^3.2.2", - "quasar": "^2.3.4", + "quasar": "^2.4.3", "vue3-ace-editor": "^2.2.1", "vue3-apexcharts": "^1.4.0", + "vuedraggable": "^4.1.0", "vuex": "^4.0.2" }, "devDependencies": { - "@quasar/app": "^3.2.5", + "@quasar/app": "^3.2.6", "@quasar/cli": "^1.2.2" } }, @@ -1846,15 +1847,15 @@ } }, "node_modules/@quasar/app": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@quasar/app/-/app-3.2.5.tgz", - "integrity": "sha512-gpHX4Svn6zLVkpy4dj6drxyaay+wW6r00PW0ty5dq+w8SIbXqj8DOmf7jkS4XtXXtvU9viFZsMVBx3S3WCKbKw==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@quasar/app/-/app-3.2.6.tgz", + "integrity": "sha512-SITUEWo4oNzvUSegsGmPySvRCu54oSMG8AGdLRkdaFbGC11QY6XB3PyE1jHaWOXWoY+o59FvOBML56TW9eWtHg==", "dev": true, "dependencies": { "@quasar/babel-preset-app": "2.0.1", "@quasar/fastclick": "1.1.4", "@quasar/ssr-helpers": "2.1.1", - "@types/compression-webpack-plugin": "9.0.0", + "@types/compression-webpack-plugin": "9.1.1", "@types/cordova": "0.0.34", "@types/express": "4.17.13", "@types/webpack-bundle-analyzer": "4.4.1", @@ -1865,26 +1866,26 @@ "chalk": "4.1.2", "chokidar": "3.5.2", "ci-info": "3.3.0", - "compression-webpack-plugin": "9.0.1", - "copy-webpack-plugin": "9.1.0", + "compression-webpack-plugin": "9.2.0", + "copy-webpack-plugin": "10.2.0", "cross-spawn": "7.0.3", "css-loader": "5.2.6", - "css-minimizer-webpack-plugin": "3.2.0", - "cssnano": "5.0.12", + "css-minimizer-webpack-plugin": "3.3.1", + "cssnano": "5.0.14", "dot-prop": "6.0.1", "elementtree": "0.1.7", "error-stack-parser": "2.0.6", - "express": "4.17.1", + "express": "4.17.2", "fast-glob": "3.2.7", "file-loader": "6.2.0", - "fork-ts-checker-webpack-plugin": "6.4.0", + "fork-ts-checker-webpack-plugin": "6.5.0", "fs-extra": "10.0.0", "hash-sum": "2.0.0", "html-minifier": "4.0.0", "html-webpack-plugin": "5.5.0", "inquirer": "8.2.0", "isbinaryfile": "4.0.8", - "launch-editor-middleware": "2.2.1", + "launch-editor-middleware": "2.3.0", "lodash.debounce": "4.0.8", "lodash.template": "4.5.0", "lodash.throttle": "4.1.1", @@ -1898,15 +1899,15 @@ "ouch": "2.0.0", "postcss": "^8.2.10", "postcss-loader": "6.2.1", - "postcss-rtlcss": "3.5.0", + "postcss-rtlcss": "3.5.1", "pretty-error": "4.0.0", "register-service-worker": "1.7.2", "sass": "1.32.12", - "sass-loader": "12.3.0", + "sass-loader": "12.4.0", "semver": "7.3.5", - "table": "6.7.3", - "terser-webpack-plugin": "5.2.5", - "ts-loader": "9.2.5", + "table": "6.7.5", + "terser-webpack-plugin": "5.3.0", + "ts-loader": "9.2.6", "typescript": "4.4.2", "url-loader": "4.1.1", "vue": "^3.2.24", @@ -1916,7 +1917,7 @@ "webpack": "^5.58.1", "webpack-bundle-analyzer": "4.5.0", "webpack-chain": "6.5.1", - "webpack-dev-server": "4.6.0", + "webpack-dev-server": "4.7.1", "webpack-merge": "5.8.0", "webpack-node-externals": "3.0.0" }, @@ -1945,6 +1946,224 @@ } } }, + "node_modules/@quasar/app/node_modules/body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "dev": true, + "dependencies": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@quasar/app/node_modules/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@quasar/app/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@quasar/app/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@quasar/app/node_modules/express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/@quasar/app/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@quasar/app/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/@quasar/app/node_modules/qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", + "dev": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@quasar/app/node_modules/raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dev": true, + "dependencies": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@quasar/app/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/@quasar/app/node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@quasar/app/node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@quasar/app/node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@quasar/app/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/@quasar/app/node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/@quasar/babel-preset-app": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@quasar/babel-preset-app/-/babel-preset-app-2.0.1.tgz", @@ -2156,13 +2375,13 @@ } }, "node_modules/@types/compression-webpack-plugin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/compression-webpack-plugin/-/compression-webpack-plugin-9.0.0.tgz", - "integrity": "sha512-3DdireWRs+SoAIKhbBIowoUMwMOXVKrDHeIO82e7D6/yJRw6kgzFhCnamJJNo10uHJ7YqP1h+g5itW+HlLw7Lg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/compression-webpack-plugin/-/compression-webpack-plugin-9.1.1.tgz", + "integrity": "sha512-cCZFFPFgZ42nWv+uHNgUenQl4gjo+oIvdPwLkGnsJBD6IpaN8dKxanLksHtc5fvlo74a5/sOuX6H320r/GROUw==", + "deprecated": "This is a stub types definition. compression-webpack-plugin provides its own type definitions, so you do not need this installed.", "dev": true, "dependencies": { - "tapable": "^2.2.0", - "webpack": "^5.51.0" + "compression-webpack-plugin": "*" } }, "node_modules/@types/connect": { @@ -2190,47 +2409,6 @@ "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=", "dev": true }, - "node_modules/@types/cssnano": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/cssnano/-/cssnano-4.0.1.tgz", - "integrity": "sha512-hGOroxRTBkYl5gSBRJOffhV4+io+Y2bFX1VP7LgKEVHJt/LPPJaWUIuDAz74Vlp7l7hCDZfaDi7iPxwNwuVA4Q==", - "dev": true, - "dependencies": { - "postcss": "5 - 7" - } - }, - "node_modules/@types/cssnano/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/@types/cssnano/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/@types/cssnano/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@types/eslint": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", @@ -2362,6 +2540,15 @@ "@types/node": "*" } }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/webpack-bundle-analyzer": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.1.tgz", @@ -2401,6 +2588,15 @@ "webpack": "*" } }, + "node_modules/@types/ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@vue/compiler-core": { "version": "3.2.26", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.26.tgz", @@ -3888,9 +4084,9 @@ "dev": true }, "node_modules/colord": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.1.tgz", - "integrity": "sha512-4LBMSt09vR0uLnPVkOUBnmxgoaeN4ewRbx801wY/bXcltXfpR/G46OdWn96XpYmCWuYvO46aBZP4NgX8HpNAcw==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", "dev": true }, "node_modules/colorette": { @@ -3957,9 +4153,9 @@ } }, "node_modules/compression-webpack-plugin": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-9.0.1.tgz", - "integrity": "sha512-vqlhZIPSyCpy6eaYWy8iPhteLWpARKotRiN5B/jr7lLowJv1GVc98Snn1Dcxe0+SKbfydLu7qZcnNuP+AyG19Q==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz", + "integrity": "sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw==", "dev": true, "dependencies": { "schema-utils": "^4.0.0", @@ -4185,20 +4381,20 @@ "dev": true }, "node_modules/copy-webpack-plugin": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", - "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.0.tgz", + "integrity": "sha512-my6iXII95c78w14HzYCNya5TlJYa44lOppAge5GSTMM1SyDxNsVGCJvhP4/ld6snm8lzjn3XOonMZD6s1L86Og==", "dev": true, "dependencies": { "fast-glob": "^3.2.7", "glob-parent": "^6.0.1", - "globby": "^11.0.3", + "globby": "^12.0.2", "normalize-path": "^3.0.0", - "schema-utils": "^3.1.1", + "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 12.20.0" }, "funding": { "type": "opencollective", @@ -4208,6 +4404,34 @@ "webpack": "^5.1.0" } }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, "node_modules/copy-webpack-plugin/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -4220,18 +4444,25 @@ "node": ">=10.13.0" } }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", @@ -4444,12 +4675,11 @@ } }, "node_modules/css-minimizer-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-5q4myvkmm29jRlI73Fl8Mc008i6o6hCEKnV6/fOrzRVDWD6EFGwDRX+SM2qCVeZ7XiztRDKHpTGDUeUMAOOagg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.3.1.tgz", + "integrity": "sha512-SHA7Hu/EiF0dOwdmV2+agvqYpG+ljlUa7Dvn1AVOmSH3N8KOERoaM9lGpstz9nGsoTjANGyUXdrxl/EwdMScRg==", "dev": true, "dependencies": { - "@types/cssnano": "^4.0.1", "cssnano": "^5.0.6", "jest-worker": "^27.0.2", "postcss": "^8.3.5", @@ -4613,13 +4843,12 @@ } }, "node_modules/cssnano": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.12.tgz", - "integrity": "sha512-U38V4x2iJ3ijPdeWqUrEr4eKBB5PbEKsNP5T8xcik2Au3LeMtiMHX0i2Hu9k51FcKofNZumbrcdC6+a521IUHg==", + "version": "5.0.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.14.tgz", + "integrity": "sha512-qzhRkFvBhv08tbyKCIfWbxBXmkIpLl1uNblt8SpTHkgLfON5OCPX/CCnkdNmEosvo8bANQYmTTMEgcVBlisHaw==", "dev": true, "dependencies": { - "cssnano-preset-default": "^5.1.8", - "is-resolvable": "^1.1.0", + "cssnano-preset-default": "^5.1.9", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -4635,15 +4864,15 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.8.tgz", - "integrity": "sha512-zWMlP0+AMPBVE852SqTrP0DnhTcTA2C1wAF92TKZ3Va+aUVqLIhkqKlnJIXXdqXD7RN+S1ujuWmNpvrJBiM/vg==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.9.tgz", + "integrity": "sha512-RhkEucqlQ+OxEi14K1p8gdXcMQy1mSpo7P1oC44oRls7BYIj8p+cht4IFBFV3W4iOjTP8EUB33XV1fX9KhDzyA==", "dev": true, "dependencies": { "css-declaration-sorter": "^6.0.3", "cssnano-utils": "^2.0.1", "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.2.1", + "postcss-colormin": "^5.2.2", "postcss-convert-values": "^5.0.2", "postcss-discard-comments": "^5.0.1", "postcss-discard-duplicates": "^5.0.1", @@ -4662,7 +4891,7 @@ "postcss-normalize-string": "^5.0.1", "postcss-normalize-timing-functions": "^5.0.1", "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.3", + "postcss-normalize-url": "^5.0.4", "postcss-normalize-whitespace": "^5.0.1", "postcss-ordered-values": "^5.0.2", "postcss-reduce-initial": "^5.0.2", @@ -5067,6 +5296,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/del/node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/del/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -6018,9 +6276,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.4.0.tgz", - "integrity": "sha512-3I3wFkc4DbzaUDPWEi96wdYGu4EKtxBafhZYm0o4mX51d9bphAY4P3mBl8K5mFXFJqVzHfmdbm9kLGnm7vwwBg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.8.3", @@ -6337,20 +6595,32 @@ } }, "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz", + "integrity": "sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==", "dev": true, "dependencies": { - "array-union": "^2.1.0", + "array-union": "^3.0.1", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "fast-glob": "^3.2.7", + "ignore": "^5.1.8", + "merge2": "^1.4.1", + "slash": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "dev": true, + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6877,9 +7147,9 @@ ] }, "node_modules/ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, "engines": { "node": ">= 4" @@ -7035,15 +7305,6 @@ "node": "*" } }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -7305,12 +7566,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "node_modules/is-retry-allowed": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", @@ -7583,84 +7838,22 @@ } }, "node_modules/launch-editor": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz", - "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.3.0.tgz", + "integrity": "sha512-3QrsCXejlWYHjBPFXTyGNhPj4rrQdB+5+r5r3wArpLH201aR+nWUgw/zKKkTmilCfY/sv6u8qo98pNvtg8LUTA==", "dev": true, "dependencies": { - "chalk": "^2.3.0", + "picocolors": "^1.0.0", "shell-quote": "^1.6.1" } }, "node_modules/launch-editor-middleware": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz", - "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==", - "dev": true, - "dependencies": { - "launch-editor": "^2.2.1" - } - }, - "node_modules/launch-editor/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/launch-editor/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/launch-editor/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/launch-editor/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/launch-editor/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/launch-editor/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.3.0.tgz", + "integrity": "sha512-GJR64trLdFFwCoL9DMn/d1SZX0OzTDPixu4mcfWTShQ4tIqCHCGvlg9fOEYQXyBlrSMQwylsJfUWncheShfV2w==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "launch-editor": "^2.3.0" } }, "node_modules/lazystream": { @@ -7959,9 +8152,9 @@ } }, "node_modules/memfs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.0.tgz", - "integrity": "sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", "dev": true, "dependencies": { "fs-monkey": "1.0.3" @@ -9260,9 +9453,9 @@ } }, "node_modules/postcss-calc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", - "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.1.0.tgz", + "integrity": "sha512-XaJ+DArhRtRAzI+IqjRNTM0i4NFKkMK5StepwynfrF27UfO6/oMaELSVDE4f9ndLHyaO4aDKUwfQKVmje/BzCg==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.2", @@ -9273,15 +9466,15 @@ } }, "node_modules/postcss-colormin": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.1.tgz", - "integrity": "sha512-VVwMrEYLcHYePUYV99Ymuoi7WhKrMGy/V9/kTS0DkCoJYmmjdOMneyhzYUxcNgteKDVbrewOkSM7Wje/MFwxzA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.2.tgz", + "integrity": "sha512-tSEe3NpqWARUTidDlF0LntPkdlhXqfDFuA1yslqpvvGAfpZ7oBaw+/QXd935NKm2U9p4PED0HDZlzmMk7fVC6g==", "dev": true, "dependencies": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", "colord": "^2.9.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -9657,14 +9850,13 @@ } }, "node_modules/postcss-normalize-url": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.3.tgz", - "integrity": "sha512-qWiUMbvkRx3kc1Dp5opzUwc7MBWZcSDK2yofCmdvFBCpx+zFPkxBC1FASQ59Pt+flYfj/nTZSkmF56+XG5elSg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", + "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", "dev": true, "dependencies": { - "is-absolute-url": "^3.0.3", "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -9749,9 +9941,9 @@ } }, "node_modules/postcss-rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/postcss-rtlcss/-/postcss-rtlcss-3.5.0.tgz", - "integrity": "sha512-S/k5PMHejw83R4Dj+8Fh+enEfLo/T8sl5KqlEyWffu6Ly9uWqURBi/pvcOnPk1AeUd60PIYhNijwUB7VEPC2Wg==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/postcss-rtlcss/-/postcss-rtlcss-3.5.1.tgz", + "integrity": "sha512-Ypqqc5zo2LTB/bVObzXxB+XN5zfMF2rNvPXDxf+LZsH7xqEEDfA8ObytKi4APT5IkAC/401/MWUAecxljZLdmg==", "dev": true, "dependencies": { "rtlcss": "^3.5.0" @@ -9931,9 +10123,9 @@ } }, "node_modules/quasar": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.3.4.tgz", - "integrity": "sha512-VgqjuzlRqZU2t4gKDHQHc/gt9nKXi9y1VRM7xYO6VOuJcm48wgOzyBdTwl1vVseghWeEIEHRM9M+R629WWF9MQ==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.4.3.tgz", + "integrity": "sha512-nvstcwygLFzRE5SUOh72kUtczknO6rjQm9aqYnFxuZCWqUtWlf8pt7jeWXccFFbY4VpB/7b39u6UCf4VYOrEOQ==", "engines": { "node": ">= 10.18.1", "npm": ">= 6.13.4", @@ -9958,16 +10150,6 @@ "node": ">=0.10.0" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -10538,9 +10720,9 @@ } }, "node_modules/sass-loader": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.3.0.tgz", - "integrity": "sha512-6l9qwhdOb7qSrtOu96QQ81LVl8v6Dp9j1w3akOm0aWHyrTYtagDt5+kS32N4yq4hHk3M+rdqoRMH+lIdqvW6HA==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", + "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", "dev": true, "dependencies": { "klona": "^2.0.4", @@ -10555,7 +10737,7 @@ }, "peerDependencies": { "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "sass": "^1.3.0", "webpack": "^5.0.0" }, @@ -10872,12 +11054,15 @@ } }, "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/slice-ansi": { @@ -10962,6 +11147,11 @@ "node": ">=0.10.0" } }, + "node_modules/sortablejs": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -11320,9 +11510,9 @@ } }, "node_modules/table": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", - "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", + "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -11408,12 +11598,12 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", "dev": true, "dependencies": { - "jest-worker": "^27.0.6", + "jest-worker": "^27.4.1", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", @@ -11622,9 +11812,9 @@ } }, "node_modules/ts-loader": { - "version": "9.2.5", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.5.tgz", - "integrity": "sha512-al/ATFEffybdRMUIr5zMEWQdVnCGMUA9d3fXJ8dBVvBlzytPvIszoG9kZoR+94k6/i293RnVOXwMaWbXhNy9pQ==", + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", + "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -11849,16 +12039,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, "node_modules/url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", @@ -11939,12 +12119,6 @@ "node": ">= 4" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -12080,6 +12254,17 @@ "vue": "> 3.0.0" } }, + "node_modules/vuedraggable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", + "dependencies": { + "sortablejs": "1.14.0" + }, + "peerDependencies": { + "vue": "^3.0.1" + } + }, "node_modules/vuex": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz", @@ -12233,9 +12418,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.2.tgz", - "integrity": "sha512-DjZyYrsHhkikAFNvSNKrpnziXukU1EChFAh9j4LAm6ndPLPW8cN0KhM7T+RAiOqsQ6ABfQ8hoKIs9IWMTjov+w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", + "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", "dev": true, "dependencies": { "colorette": "^2.0.10", @@ -12309,11 +12494,16 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.6.0.tgz", - "integrity": "sha512-oojcBIKvx3Ya7qs1/AVWHDgmP1Xml8rGsEBnSobxU/UJSX1xP1GPM3MwsAnDzvqcVmVki8tV7lbcsjEjk0PtYg==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.1.tgz", + "integrity": "sha512-bkoNgFyqlF/CT726Axtf/ELHHYsTZJWz3QJ6HqstWPbalhjAPunlPH9bwt/Lr5cLb+uoLmsta6svVplVzq8beA==", "dev": true, "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", "ansi-html-community": "^0.0.8", "bonjour": "^3.5.0", "chokidar": "^3.5.2", @@ -12336,8 +12526,7 @@ "sockjs": "^0.3.21", "spdy": "^4.0.2", "strip-ansi": "^7.0.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^5.2.1", + "webpack-dev-middleware": "^5.3.0", "ws": "^8.1.0" }, "bin": { @@ -12462,9 +12651,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", - "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.0.tgz", + "integrity": "sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -14041,15 +14230,15 @@ "dev": true }, "@quasar/app": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@quasar/app/-/app-3.2.5.tgz", - "integrity": "sha512-gpHX4Svn6zLVkpy4dj6drxyaay+wW6r00PW0ty5dq+w8SIbXqj8DOmf7jkS4XtXXtvU9viFZsMVBx3S3WCKbKw==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@quasar/app/-/app-3.2.6.tgz", + "integrity": "sha512-SITUEWo4oNzvUSegsGmPySvRCu54oSMG8AGdLRkdaFbGC11QY6XB3PyE1jHaWOXWoY+o59FvOBML56TW9eWtHg==", "dev": true, "requires": { "@quasar/babel-preset-app": "2.0.1", "@quasar/fastclick": "1.1.4", "@quasar/ssr-helpers": "2.1.1", - "@types/compression-webpack-plugin": "9.0.0", + "@types/compression-webpack-plugin": "9.1.1", "@types/cordova": "0.0.34", "@types/express": "4.17.13", "@types/webpack-bundle-analyzer": "4.4.1", @@ -14060,26 +14249,26 @@ "chalk": "4.1.2", "chokidar": "3.5.2", "ci-info": "3.3.0", - "compression-webpack-plugin": "9.0.1", - "copy-webpack-plugin": "9.1.0", + "compression-webpack-plugin": "9.2.0", + "copy-webpack-plugin": "10.2.0", "cross-spawn": "7.0.3", "css-loader": "5.2.6", - "css-minimizer-webpack-plugin": "3.2.0", - "cssnano": "5.0.12", + "css-minimizer-webpack-plugin": "3.3.1", + "cssnano": "5.0.14", "dot-prop": "6.0.1", "elementtree": "0.1.7", "error-stack-parser": "2.0.6", - "express": "4.17.1", + "express": "4.17.2", "fast-glob": "3.2.7", "file-loader": "6.2.0", - "fork-ts-checker-webpack-plugin": "6.4.0", + "fork-ts-checker-webpack-plugin": "6.5.0", "fs-extra": "10.0.0", "hash-sum": "2.0.0", "html-minifier": "4.0.0", "html-webpack-plugin": "5.5.0", "inquirer": "8.2.0", "isbinaryfile": "4.0.8", - "launch-editor-middleware": "2.2.1", + "launch-editor-middleware": "2.3.0", "lodash.debounce": "4.0.8", "lodash.template": "4.5.0", "lodash.throttle": "4.1.1", @@ -14093,15 +14282,15 @@ "ouch": "2.0.0", "postcss": "^8.2.10", "postcss-loader": "6.2.1", - "postcss-rtlcss": "3.5.0", + "postcss-rtlcss": "3.5.1", "pretty-error": "4.0.0", "register-service-worker": "1.7.2", "sass": "1.32.12", - "sass-loader": "12.3.0", + "sass-loader": "12.4.0", "semver": "7.3.5", - "table": "6.7.3", - "terser-webpack-plugin": "5.2.5", - "ts-loader": "9.2.5", + "table": "6.7.5", + "terser-webpack-plugin": "5.3.0", + "ts-loader": "9.2.6", "typescript": "4.4.2", "url-loader": "4.1.1", "vue": "^3.2.24", @@ -14111,9 +14300,184 @@ "webpack": "^5.58.1", "webpack-bundle-analyzer": "4.5.0", "webpack-chain": "6.5.1", - "webpack-dev-server": "4.6.0", + "webpack-dev-server": "4.7.1", "webpack-merge": "5.8.0", "webpack-node-externals": "3.0.0" + }, + "dependencies": { + "body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "dev": true, + "requires": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + } + }, + "bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "dev": true + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", + "dev": true + }, + "raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dev": true, + "requires": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + } } }, "@quasar/babel-preset-app": { @@ -14276,13 +14640,12 @@ } }, "@types/compression-webpack-plugin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/compression-webpack-plugin/-/compression-webpack-plugin-9.0.0.tgz", - "integrity": "sha512-3DdireWRs+SoAIKhbBIowoUMwMOXVKrDHeIO82e7D6/yJRw6kgzFhCnamJJNo10uHJ7YqP1h+g5itW+HlLw7Lg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/compression-webpack-plugin/-/compression-webpack-plugin-9.1.1.tgz", + "integrity": "sha512-cCZFFPFgZ42nWv+uHNgUenQl4gjo+oIvdPwLkGnsJBD6IpaN8dKxanLksHtc5fvlo74a5/sOuX6H320r/GROUw==", "dev": true, "requires": { - "tapable": "^2.2.0", - "webpack": "^5.51.0" + "compression-webpack-plugin": "*" } }, "@types/connect": { @@ -14310,39 +14673,6 @@ "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=", "dev": true }, - "@types/cssnano": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/cssnano/-/cssnano-4.0.1.tgz", - "integrity": "sha512-hGOroxRTBkYl5gSBRJOffhV4+io+Y2bFX1VP7LgKEVHJt/LPPJaWUIuDAz74Vlp7l7hCDZfaDi7iPxwNwuVA4Q==", - "dev": true, - "requires": { - "postcss": "5 - 7" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "@types/eslint": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", @@ -14474,6 +14804,15 @@ "@types/node": "*" } }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/webpack-bundle-analyzer": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.4.1.tgz", @@ -14513,6 +14852,15 @@ "webpack": "*" } }, + "@types/ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@vue/compiler-core": { "version": "3.2.26", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.26.tgz", @@ -15728,9 +16076,9 @@ "dev": true }, "colord": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.1.tgz", - "integrity": "sha512-4LBMSt09vR0uLnPVkOUBnmxgoaeN4ewRbx801wY/bXcltXfpR/G46OdWn96XpYmCWuYvO46aBZP4NgX8HpNAcw==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", "dev": true }, "colorette": { @@ -15805,9 +16153,9 @@ } }, "compression-webpack-plugin": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-9.0.1.tgz", - "integrity": "sha512-vqlhZIPSyCpy6eaYWy8iPhteLWpARKotRiN5B/jr7lLowJv1GVc98Snn1Dcxe0+SKbfydLu7qZcnNuP+AyG19Q==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz", + "integrity": "sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw==", "dev": true, "requires": { "schema-utils": "^4.0.0", @@ -15965,19 +16313,40 @@ "dev": true }, "copy-webpack-plugin": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", - "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.0.tgz", + "integrity": "sha512-my6iXII95c78w14HzYCNya5TlJYa44lOppAge5GSTMM1SyDxNsVGCJvhP4/ld6snm8lzjn3XOonMZD6s1L86Og==", "dev": true, "requires": { "fast-glob": "^3.2.7", "glob-parent": "^6.0.1", - "globby": "^11.0.3", + "globby": "^12.0.2", "normalize-path": "^3.0.0", - "schema-utils": "^3.1.1", + "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0" }, "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -15987,15 +16356,22 @@ "is-glob": "^4.0.3" } }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } }, "serialize-javascript": { @@ -16151,12 +16527,11 @@ } }, "css-minimizer-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-5q4myvkmm29jRlI73Fl8Mc008i6o6hCEKnV6/fOrzRVDWD6EFGwDRX+SM2qCVeZ7XiztRDKHpTGDUeUMAOOagg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.3.1.tgz", + "integrity": "sha512-SHA7Hu/EiF0dOwdmV2+agvqYpG+ljlUa7Dvn1AVOmSH3N8KOERoaM9lGpstz9nGsoTjANGyUXdrxl/EwdMScRg==", "dev": true, "requires": { - "@types/cssnano": "^4.0.1", "cssnano": "^5.0.6", "jest-worker": "^27.0.2", "postcss": "^8.3.5", @@ -16265,27 +16640,26 @@ "dev": true }, "cssnano": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.12.tgz", - "integrity": "sha512-U38V4x2iJ3ijPdeWqUrEr4eKBB5PbEKsNP5T8xcik2Au3LeMtiMHX0i2Hu9k51FcKofNZumbrcdC6+a521IUHg==", + "version": "5.0.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.14.tgz", + "integrity": "sha512-qzhRkFvBhv08tbyKCIfWbxBXmkIpLl1uNblt8SpTHkgLfON5OCPX/CCnkdNmEosvo8bANQYmTTMEgcVBlisHaw==", "dev": true, "requires": { - "cssnano-preset-default": "^5.1.8", - "is-resolvable": "^1.1.0", + "cssnano-preset-default": "^5.1.9", "lilconfig": "^2.0.3", "yaml": "^1.10.2" } }, "cssnano-preset-default": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.8.tgz", - "integrity": "sha512-zWMlP0+AMPBVE852SqTrP0DnhTcTA2C1wAF92TKZ3Va+aUVqLIhkqKlnJIXXdqXD7RN+S1ujuWmNpvrJBiM/vg==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.9.tgz", + "integrity": "sha512-RhkEucqlQ+OxEi14K1p8gdXcMQy1mSpo7P1oC44oRls7BYIj8p+cht4IFBFV3W4iOjTP8EUB33XV1fX9KhDzyA==", "dev": true, "requires": { "css-declaration-sorter": "^6.0.3", "cssnano-utils": "^2.0.1", "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.2.1", + "postcss-colormin": "^5.2.2", "postcss-convert-values": "^5.0.2", "postcss-discard-comments": "^5.0.1", "postcss-discard-duplicates": "^5.0.1", @@ -16304,7 +16678,7 @@ "postcss-normalize-string": "^5.0.1", "postcss-normalize-timing-functions": "^5.0.1", "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.3", + "postcss-normalize-url": "^5.0.4", "postcss-normalize-whitespace": "^5.0.1", "postcss-ordered-values": "^5.0.2", "postcss-reduce-initial": "^5.0.2", @@ -16622,6 +16996,28 @@ "p-map": "^4.0.0", "rimraf": "^3.0.2", "slash": "^3.0.0" + }, + "dependencies": { + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } } }, "depd": { @@ -17374,9 +17770,9 @@ "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==" }, "fork-ts-checker-webpack-plugin": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.4.0.tgz", - "integrity": "sha512-3I3wFkc4DbzaUDPWEi96wdYGu4EKtxBafhZYm0o4mX51d9bphAY4P3mBl8K5mFXFJqVzHfmdbm9kLGnm7vwwBg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", + "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", @@ -17612,17 +18008,25 @@ "dev": true }, "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz", + "integrity": "sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==", "dev": true, "requires": { - "array-union": "^2.1.0", + "array-union": "^3.0.1", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "fast-glob": "^3.2.7", + "ignore": "^5.1.8", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "dependencies": { + "array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "dev": true + } } }, "got": { @@ -18025,9 +18429,9 @@ "dev": true }, "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "import-fresh": { @@ -18149,12 +18553,6 @@ "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", "dev": true }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -18331,12 +18729,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "is-retry-allowed": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", @@ -18549,74 +18941,22 @@ } }, "launch-editor": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz", - "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.3.0.tgz", + "integrity": "sha512-3QrsCXejlWYHjBPFXTyGNhPj4rrQdB+5+r5r3wArpLH201aR+nWUgw/zKKkTmilCfY/sv6u8qo98pNvtg8LUTA==", "dev": true, "requires": { - "chalk": "^2.3.0", + "picocolors": "^1.0.0", "shell-quote": "^1.6.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "launch-editor-middleware": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz", - "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.3.0.tgz", + "integrity": "sha512-GJR64trLdFFwCoL9DMn/d1SZX0OzTDPixu4mcfWTShQ4tIqCHCGvlg9fOEYQXyBlrSMQwylsJfUWncheShfV2w==", "dev": true, "requires": { - "launch-editor": "^2.2.1" + "launch-editor": "^2.3.0" } }, "lazystream": { @@ -18876,9 +19216,9 @@ "dev": true }, "memfs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.0.tgz", - "integrity": "sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", "dev": true, "requires": { "fs-monkey": "1.0.3" @@ -19857,9 +20197,9 @@ } }, "postcss-calc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", - "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.1.0.tgz", + "integrity": "sha512-XaJ+DArhRtRAzI+IqjRNTM0i4NFKkMK5StepwynfrF27UfO6/oMaELSVDE4f9ndLHyaO4aDKUwfQKVmje/BzCg==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.2", @@ -19867,15 +20207,15 @@ } }, "postcss-colormin": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.1.tgz", - "integrity": "sha512-VVwMrEYLcHYePUYV99Ymuoi7WhKrMGy/V9/kTS0DkCoJYmmjdOMneyhzYUxcNgteKDVbrewOkSM7Wje/MFwxzA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.2.tgz", + "integrity": "sha512-tSEe3NpqWARUTidDlF0LntPkdlhXqfDFuA1yslqpvvGAfpZ7oBaw+/QXd935NKm2U9p4PED0HDZlzmMk7fVC6g==", "dev": true, "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", "colord": "^2.9.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-convert-values": { @@ -20107,14 +20447,13 @@ } }, "postcss-normalize-url": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.3.tgz", - "integrity": "sha512-qWiUMbvkRx3kc1Dp5opzUwc7MBWZcSDK2yofCmdvFBCpx+zFPkxBC1FASQ59Pt+flYfj/nTZSkmF56+XG5elSg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", + "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", "dev": true, "requires": { - "is-absolute-url": "^3.0.3", "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "dependencies": { "normalize-url": { @@ -20165,9 +20504,9 @@ } }, "postcss-rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/postcss-rtlcss/-/postcss-rtlcss-3.5.0.tgz", - "integrity": "sha512-S/k5PMHejw83R4Dj+8Fh+enEfLo/T8sl5KqlEyWffu6Ly9uWqURBi/pvcOnPk1AeUd60PIYhNijwUB7VEPC2Wg==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/postcss-rtlcss/-/postcss-rtlcss-3.5.1.tgz", + "integrity": "sha512-Ypqqc5zo2LTB/bVObzXxB+XN5zfMF2rNvPXDxf+LZsH7xqEEDfA8ObytKi4APT5IkAC/401/MWUAecxljZLdmg==", "dev": true, "requires": { "rtlcss": "^3.5.0" @@ -20303,9 +20642,9 @@ "dev": true }, "quasar": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.3.4.tgz", - "integrity": "sha512-VgqjuzlRqZU2t4gKDHQHc/gt9nKXi9y1VRM7xYO6VOuJcm48wgOzyBdTwl1vVseghWeEIEHRM9M+R629WWF9MQ==" + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.4.3.tgz", + "integrity": "sha512-nvstcwygLFzRE5SUOh72kUtczknO6rjQm9aqYnFxuZCWqUtWlf8pt7jeWXccFFbY4VpB/7b39u6UCf4VYOrEOQ==" }, "query-string": { "version": "5.1.1", @@ -20318,12 +20657,6 @@ "strict-uri-encode": "^1.0.0" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -20761,9 +21094,9 @@ } }, "sass-loader": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.3.0.tgz", - "integrity": "sha512-6l9qwhdOb7qSrtOu96QQ81LVl8v6Dp9j1w3akOm0aWHyrTYtagDt5+kS32N4yq4hHk3M+rdqoRMH+lIdqvW6HA==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", + "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", "dev": true, "requires": { "klona": "^2.0.4", @@ -21031,9 +21364,9 @@ } }, "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true }, "slice-ansi": { @@ -21101,6 +21434,11 @@ } } }, + "sortablejs": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -21378,9 +21716,9 @@ } }, "table": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", - "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", + "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", "dev": true, "requires": { "ajv": "^8.0.1", @@ -21449,12 +21787,12 @@ } }, "terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", "dev": true, "requires": { - "jest-worker": "^27.0.6", + "jest-worker": "^27.4.1", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", @@ -21598,9 +21936,9 @@ } }, "ts-loader": { - "version": "9.2.5", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.5.tgz", - "integrity": "sha512-al/ATFEffybdRMUIr5zMEWQdVnCGMUA9d3fXJ8dBVvBlzytPvIszoG9kZoR+94k6/i293RnVOXwMaWbXhNy9pQ==", + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", + "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -21766,24 +22104,6 @@ "punycode": "^2.1.0" } }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, "url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", @@ -21952,6 +22272,14 @@ "integrity": "sha512-96qP8JDqB9vwU7bkG5nVU+E0UGQn7yYQVqUUCLQMYWDuQyu2vE77H/UFZ1yI+hwzlSTBKT9BqnNG8JsFegB3eg==", "requires": {} }, + "vuedraggable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", + "requires": { + "sortablejs": "1.14.0" + } + }, "vuex": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz", @@ -22092,9 +22420,9 @@ } }, "webpack-dev-middleware": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.2.tgz", - "integrity": "sha512-DjZyYrsHhkikAFNvSNKrpnziXukU1EChFAh9j4LAm6ndPLPW8cN0KhM7T+RAiOqsQ6ABfQ8hoKIs9IWMTjov+w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", + "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", "dev": true, "requires": { "colorette": "^2.0.10", @@ -22146,11 +22474,16 @@ } }, "webpack-dev-server": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.6.0.tgz", - "integrity": "sha512-oojcBIKvx3Ya7qs1/AVWHDgmP1Xml8rGsEBnSobxU/UJSX1xP1GPM3MwsAnDzvqcVmVki8tV7lbcsjEjk0PtYg==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.1.tgz", + "integrity": "sha512-bkoNgFyqlF/CT726Axtf/ELHHYsTZJWz3QJ6HqstWPbalhjAPunlPH9bwt/Lr5cLb+uoLmsta6svVplVzq8beA==", "dev": true, "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", "ansi-html-community": "^0.0.8", "bonjour": "^3.5.0", "chokidar": "^3.5.2", @@ -22173,8 +22506,7 @@ "sockjs": "^0.3.21", "spdy": "^4.0.2", "strip-ansi": "^7.0.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^5.2.1", + "webpack-dev-middleware": "^5.3.0", "ws": "^8.1.0" }, "dependencies": { @@ -22250,9 +22582,9 @@ } }, "ws": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", - "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.0.tgz", + "integrity": "sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==", "dev": true, "requires": {} } diff --git a/web/package.json b/web/package.json index 84dfbce1d2..0bb112431d 100644 --- a/web/package.json +++ b/web/package.json @@ -15,13 +15,14 @@ "axios": "^0.24.0", "dotenv": "^8.6.0", "qrcode.vue": "^3.2.2", - "quasar": "^2.3.4", + "quasar": "^2.4.3", "vue3-ace-editor": "^2.2.1", "vue3-apexcharts": "^1.4.0", + "vuedraggable": "^4.1.0", "vuex": "^4.0.2" }, "devDependencies": { - "@quasar/app": "^3.2.5", + "@quasar/app": "^3.2.6", "@quasar/cli": "^1.2.2" }, "browserslist": [ @@ -30,4 +31,4 @@ "last 2 Edge versions", "last 1 Safari versions" ] -} +} \ No newline at end of file diff --git a/web/src/api/agents.js b/web/src/api/agents.js index 68845b2d92..9f1bddfdae 100644 --- a/web/src/api/agents.js +++ b/web/src/api/agents.js @@ -1,7 +1,24 @@ import axios from "axios" +import { openURL } from "quasar"; +import { router } from "@/router" const baseUrl = "/agents" +export function runTakeControl(agent_id) { + const url = router.resolve(`/takecontrol/${agent_id}`).href; + openURL(url, null, { popup: true, scrollbars: false, location: false, status: false, toolbar: false, menubar: false, width: 1600, height: 900 }); +} + +export function openAgentWindow(agent_id) { + const url = router.resolve(`/agents/${agent_id}`).href; + openURL(url, null, { popup: true, scrollbars: false, location: false, status: false, toolbar: false, menubar: false, width: 1600, height: 900 }); +} + +export function runRemoteBackground(agent_id) { + const url = router.resolve(`/remotebackground/${agent_id}`).href; + openURL(url, null, { popup: true, scrollbars: false, location: false, status: false, toolbar: false, menubar: false, width: 1280, height: 900 }); +} + export async function fetchAgents(params = {}) { try { const { data } = await axios.get(`${baseUrl}/`, { params: params }) @@ -18,6 +35,16 @@ export async function fetchAgent(agent_id, params = {}) { } catch (e) { console.error(e) } } +export async function editAgent(agent_id, payload) { + const { data } = await axios.put(`${baseUrl}/${agent_id}/`, payload) + return data +} + +export async function removeAgent(agent_id) { + const { data } = await axios.delete(`${baseUrl}/${agent_id}/`) + return data +} + export async function fetchAgentHistory(agent_id, params = {}) { try { const { data } = await axios.get(`${baseUrl}/${agent_id}/history/`, { params: params }) @@ -101,11 +128,21 @@ export async function scheduleAgentReboot(agent_id, payload) { return data } +export async function agentRebootNow(agent_id) { + const { data } = await axios.post(`${baseUrl}/${agent_id}/reboot/`, payload) + return data +} + export async function sendAgentRecoverMesh(agent_id, params = {}) { const { data } = await axios.post(`${baseUrl}/${agent_id}/meshcentral/recover/`, { params: params }) return data } +export async function sendAgentPing(agent_id, params = {}) { + const { data } = await axios.get(`${baseUrl}/${agent_id}/ping/`, { params: params }) + return data +} + // agent notes export async function fetchAgentNotes(agent_id, params = {}) { try { diff --git a/web/src/api/checks.js b/web/src/api/checks.js index ec5436a8ab..bd28025201 100644 --- a/web/src/api/checks.js +++ b/web/src/api/checks.js @@ -29,4 +29,9 @@ export async function removeCheck(id) { export async function resetCheck(id) { const { data } = await axios.post(`${baseUrl}/${id}/reset/`) return data +} + +export async function runAgentChecks(agent_id) { + const { data } = await axios.post(`${baseUrl}/${agent_id}/run/`) + return data } \ No newline at end of file diff --git a/web/src/api/core.js b/web/src/api/core.js index 3c04358e30..f6293cc4ce 100644 --- a/web/src/api/core.js +++ b/web/src/api/core.js @@ -1,4 +1,5 @@ import axios from "axios" +import { openURL } from "quasar"; const baseUrl = "/core" @@ -17,4 +18,18 @@ export async function uploadMeshAgent(payload) { export async function fetchDashboardInfo(params = {}) { const { data } = await axios.get(`${baseUrl}/dashinfo/`, { params: params }) return data +} + +export async function fetchURLActions(params = {}) { + try { + const { data } = await axios.get(`${baseUrl}/urlaction/`, { params: params }) + return data + } catch (e) { console.error(e) } +} + +export async function runURLAction(payload) { + try { + const { data } = await axios.patch(`${baseUrl}/urlaction/run/`, payload) + openURL(data) + } catch (e) { console.error(e) } } \ No newline at end of file diff --git a/web/src/components/AgentTable.vue b/web/src/components/AgentTable.vue index 1b29069e8f..fa1e6c524f 100644 --- a/web/src/components/AgentTable.vue +++ b/web/src/components/AgentTable.vue @@ -4,8 +4,8 @@ dense :table-class="{ 'table-bgcolor': !$q.dark.isActive, 'table-bgcolor-dark': $q.dark.isActive }" class="agents-tbl-sticky" - :table-style="{ 'max-height': agentTableHeight }" - :rows="frame" + :table-style="{ 'max-height': tableHeight }" + :rows="agents" :filter="search" :filter-method="filterTable" :columns="columns" @@ -84,189 +84,8 @@ @click="agentRowSelected(props.row.agent_id)" @dblclick="rowDoubleClicked(props.row.agent_id)" > - - - - - - - - Edit {{ props.row.hostname }} - - - - - - - Pending Agent Actions - - - - - - - - Take Control - - - - - - - Run URL Action - - - - - - - {{ action.name }} - - - - - - - - - - Send Command - - - - - - - Run Script - - - - - - - Run Favorited Script - - - - - - - {{ script.label }} - - - - - - - - - - Remote Background - - - - - - - - - {{ props.row.maintenance_mode ? "Disable Maintenance Mode" : "Enable Maintenance Mode" }} - - - - - - - - - Patch Management - - - - - - - - Run Patch Status Scan - - - Install Patches Now - - - - - - - - - - Run Checks - - - - - - - Reboot - - - - - - - - - Now - - - - Later - - - - - - - - - - Assign Automation Policy - - - - - - - Agent Recovery - - - - - - - Remove Agent - - - - - Close - - + import mixins from "@/mixins/mixins"; -import { mapGetters } from "vuex"; -import { date, openURL } from "quasar"; +import { mapState } from "vuex"; +import { date } from "quasar"; import EditAgent from "@/components/modals/agents/EditAgent"; -import RebootLater from "@/components/modals/agents/RebootLater"; import PendingActions from "@/components/logs/PendingActions"; -import PolicyAdd from "@/components/automation/modals/PolicyAdd"; -import SendCommand from "@/components/modals/agents/SendCommand"; -import AgentRecovery from "@/components/modals/agents/AgentRecovery"; -import RunScript from "@/components/modals/agents/RunScript"; +import AgentActionMenu from "@/components/agents/AgentActionMenu"; +import { runURLAction } from "@/api/core"; +import { runTakeControl, runRemoteBackground } from "@/api/agents"; export default { name: "AgentTable", - props: ["frame", "columns", "userName", "search", "visibleColumns"], + components: { + AgentActionMenu, + }, + props: ["agents", "columns", "search", "visibleColumns"], inject: ["refreshDashboard"], mixins: [mixins], data() { @@ -411,8 +231,6 @@ export default { sortBy: "hostname", descending: false, }, - favoriteScripts: [], - urlActions: [], }; }, methods: { @@ -479,167 +297,24 @@ export default { this.showEditAgent(agent_id); break; case "takecontrol": - this.takeControl(agent_id); + runTakeControl(agent_id); break; case "remotebg": - this.remoteBG(agent_id); + runRemoteBackground(agent_id); break; case "urlaction": - this.runURLAction(agent_id, this.agentUrlAction); + runURLAction({ agent_id: agent_id, action: this.agentUrlAction }); break; } }, 500); }, - getFavoriteScripts() { - this.favoriteScripts = []; - this.$axios - .get("/scripts/", { params: { showCommunityScripts: this.showCommunityScripts } }) - .then(r => { - if (r.data.filter(k => k.favorite === true).length === 0) { - this.notifyWarning("You don't have any scripts favorited!"); - return; - } - this.favoriteScripts = r.data - .filter(k => k.favorite === true) - .map(script => ({ - label: script.name, - value: script.id, - timeout: script.default_timeout, - args: script.args, - })) - .sort((a, b) => a.label.localeCompare(b.label)); - }) - .catch(e => {}); - }, - runPatchStatusScan(agent) { - this.$axios - .post(`/winupdate/${agent.agent_id}/scan/`) - .then(r => { - this.notifySuccess(`Scan will be run shortly on ${agent.hostname}`); - }) - .catch(e => {}); - }, - installPatches(agent) { - this.$q.loading.show(); - this.$axios - .post(`/winupdate/${agent.agent_id}/install/`) - .then(r => { - this.$q.loading.hide(); - this.notifySuccess(r.data); - }) - .catch(e => { - this.$q.loading.hide(); - }); - }, showPendingActionsModal(agent) { - this.$q - .dialog({ - component: PendingActions, - componentProps: { - agent: agent, - }, - }) - .onDismiss(this.refreshDashboard); - }, - takeControl(agent_id) { - const url = this.$router.resolve(`/takecontrol/${agent_id}`).href; - window.open(url, "", "scrollbars=no,location=no,status=no,toolbar=no,menubar=no,width=1600,height=900"); - }, - remoteBG(agent_id) { - const url = this.$router.resolve(`/remotebackground/${agent_id}`).href; - window.open(url, "", "scrollbars=no,location=no,status=no,toolbar=no,menubar=no,width=1280,height=826"); - }, - runChecks(agent) { - this.$q.loading.show(); - this.$axios - .get(`/checks/${agent.agent_id}/run/`) - .then(r => { - this.$q.loading.hide(); - this.notifySuccess(r.data); - }) - .catch(e => { - this.$q.loading.hide(); - }); - }, - removeAgent(agent) { - this.$q - .dialog({ - title: `Please type yes in the box below to confirm deletion.`, - prompt: { - model: "", - type: "text", - isValid: val => val === "yes", - }, - cancel: true, - ok: { label: "Uninstall", color: "negative" }, - persistent: true, - html: true, - }) - .onOk(val => { - this.$q.loading.show(); - this.$axios - .delete(`/agents/${agent.agent_id}/`) - .then(r => { - this.$q.loading.hide(); - this.notifySuccess(r.data); - this.refreshDashboard(); - }) - .catch(e => { - this.$q.loading.hide(); - }); - }); - }, - pingAgent(agent) { - this.$q.loading.show(); - this.$axios - .get(`/agents/${agent.agent_id}/ping/`) - .then(r => { - this.$q.loading.hide(); - if (r.data.status === "offline") { - this.$q - .dialog({ - title: "Agent offline", - message: `${agent.hostname} cannot be contacted. - Would you like to continue with the uninstall? - If so, the agent will need to be manually uninstalled from the computer.`, - cancel: { label: "No", color: "negative" }, - ok: { label: "Yes", color: "positive" }, - persistent: true, - }) - .onOk(() => this.removeAgent(agent)) - .onCancel(() => { - return; - }); - } else if (r.data.status === "online") { - this.removeAgent(agent); - } else { - this.notifyError("Something went wrong"); - } - }) - .catch(e => { - this.$q.loading.hide(); - }); - }, - rebootNow(agent) { - this.$q - .dialog({ - title: "Are you sure?", - message: `Reboot ${agent.hostname} now`, - cancel: true, - persistent: true, - }) - .onOk(() => { - this.$q.loading.show(); - this.$axios - .post(`/agents/${agent.agent_id}/reboot/`) - .then(r => { - this.$q.loading.hide(); - this.notifySuccess(`${agent.hostname} will now be restarted`); - }) - .catch(e => { - this.$q.loading.hide(); - }); - }); + this.$q.dialog({ + component: PendingActions, + componentProps: { + agent: agent, + }, + }); }, agentRowSelected(agent_id) { this.$store.commit("setActiveRow", agent_id); @@ -675,34 +350,6 @@ export default { return "agent-normal"; } }, - showPolicyAdd(agent) { - this.$q - .dialog({ - component: PolicyAdd, - componentProps: { - type: "agent", - object: agent, - }, - }) - .onOk(this.refreshDashboard); - }, - toggleMaintenance(agent) { - let data = { - maintenance_mode: !agent.maintenance_mode, - }; - - this.$axios - .put(`/agents/${agent.agent_id}/`, data) - .then(r => { - this.notifySuccess( - `Maintenance mode was ${agent.maintenance_mode ? "disabled" : "enabled"} on ${agent.hostname}` - ); - this.refreshDashboard(); - }) - .catch(e => { - console.log(e); - }); - }, rowSelectedClass(agent_id) { if (agent_id === this.selectedRow) { return this.$q.dark.isActive ? "highlight-dark" : "highlight"; @@ -710,57 +357,6 @@ export default { return ""; } }, - getURLActions() { - this.$axios - .get("/core/urlaction/") - .then(r => { - if (r.data.length === 0) { - this.notifyWarning("No URL Actions configured. Go to Settings > Global Settings > URL Actions"); - return; - } - this.urlActions = r.data; - }) - .catch(() => {}); - }, - runURLAction(agent_id, action) { - const data = { - agent_id: agent_id, - action: action, - }; - this.$axios - .patch("/core/urlaction/run/", data) - .then(r => { - openURL(r.data); - }) - .catch(() => {}); - }, - showRunScript(agent, script = undefined) { - this.$q.dialog({ - component: RunScript, - componentProps: { - agent, - script, - }, - }); - }, - showSendCommand(agent) { - this.$q.dialog({ - component: SendCommand, - componentProps: { - agent: agent, - }, - }); - }, - showRebootLaterModal(agent) { - this.$q - .dialog({ - component: RebootLater, - componentProps: { - agent: agent, - }, - }) - .onOk(this.refreshDashboard); - }, showEditAgent(agent_id) { this.$q .dialog({ @@ -769,19 +365,14 @@ export default { agent_id: agent_id, }, }) - .onOk(this.refreshDashboard); - }, - showAgentRecovery(agent) { - this.$q.dialog({ - component: AgentRecovery, - componentProps: { - agent: agent, - }, - }); + .onOk(() => { + this.refreshDashboard(); + this.$store.commit("setRefreshSummaryTab", true); + }); }, }, computed: { - ...mapGetters(["agentTableHeight", "showCommunityScripts"]), + ...mapState(["tableHeight"]), agentDblClickAction() { return this.$store.state.agentDblClickAction; }, diff --git a/web/src/components/AlertsIcon.vue b/web/src/components/AlertsIcon.vue index 6d38dff31a..b6ff4fd022 100644 --- a/web/src/components/AlertsIcon.vue +++ b/web/src/components/AlertsIcon.vue @@ -6,7 +6,11 @@ No New Alerts - {{ alert.client }} - {{ alert.site }} - {{ alert.hostname }} + {{ alert.client }} - {{ alert.site }} - {{ alert.hostname }} {{ alert.message }} diff --git a/web/src/components/AlertsManager.vue b/web/src/components/AlertsManager.vue index 54cc22a352..f57fc64581 100644 --- a/web/src/components/AlertsManager.vue +++ b/web/src/components/AlertsManager.vue @@ -229,6 +229,7 @@ export default { this.selectedTemplate = null; }, refresh() { + this.$store.dispatch("refreshDashboard"); this.getTemplates(); this.clearRow(); }, @@ -246,7 +247,6 @@ export default { .then(r => { this.refresh(); this.$q.loading.hide(); - this.notifySuccess(`Alert template ${template.name} was deleted!`); }) .catch(error => { @@ -308,6 +308,7 @@ export default { .put(`alerts/templates/${template.id}/`, data) .then(r => { this.notifySuccess(text); + this.$store.dispatch("refreshDashboard"); }) .catch(error => {}); }, diff --git a/web/src/components/FileBar.vue b/web/src/components/FileBar.vue index 2bac216c7f..40f29f774a 100644 --- a/web/src/components/FileBar.vue +++ b/web/src/components/FileBar.vue @@ -82,6 +82,10 @@ Permissions Manager + + + Integrations Manager + User Administration @@ -198,10 +202,10 @@ import Deployment from "@/components/clients/Deployment"; import ServerMaintenance from "@/components/modals/core/ServerMaintenance"; import CodeSign from "@/components/modals/coresettings/CodeSign"; import PermissionsManager from "@/components/accounts/PermissionsManager"; +import IntegrationsManager from "@/components/integrations/IntegrationsManager"; export default { name: "FileBar", - inject: ["refreshDashboard"], components: { UpdateAgents, EditCoreSettings, @@ -210,6 +214,7 @@ export default { ServerMaintenance, CodeSign, PermissionsManager, + IntegrationsManager }, data() { return { @@ -254,38 +259,41 @@ export default { }); }, showAlertsManager() { - this.$q - .dialog({ - component: AlertsManager, - }) - .onDismiss(this.refreshDashboard); + this.$q.dialog({ + component: AlertsManager, + }); }, showClientsManager() { this.$q .dialog({ component: ClientsManager, }) - .onDismiss(() => this.refreshDashboard(false)); + .onDismiss(() => this.$store.dispatch("refreshDashboard", true)); }, showAddClientModal() { this.$q .dialog({ component: ClientsForm, }) - .onOk(this.refreshDashboard); + .onOk(() => this.$store.dispatch("loadTree")); }, showAddSiteModal() { this.$q .dialog({ component: SitesForm, }) - .onOk(this.refreshDashboard); + .onOk(() => this.$store.dispatch("loadTree")); }, showPermissionsManager() { this.$q.dialog({ component: PermissionsManager, }); }, + showIntegrationsManager() { + this.$q.dialog({ + component: IntegrationsManager, + }); + }, showAuditManager() { this.$q.dialog({ component: DialogWrapper, @@ -334,11 +342,9 @@ export default { }); }, showPendingActions() { - this.$q - .dialog({ - component: PendingActions, - }) - .onDismiss(this.refreshDashboard); + this.$q.dialog({ + component: PendingActions, + }); }, showDeployments() { this.$q.dialog({ diff --git a/web/src/components/SubTableTabs.vue b/web/src/components/SubTableTabs.vue index a28be3aa68..012b8fd6b7 100644 --- a/web/src/components/SubTableTabs.vue +++ b/web/src/components/SubTableTabs.vue @@ -12,49 +12,110 @@ narrow-indicator no-caps > - - - - - - - - - - + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + @@ -92,9 +153,15 @@ export default { AssetsTab, NotesTab, }, + props: { + activeTabs: { + type: Array, + default: ["summary", "checks", "tasks", "patches", "software", "history", "notes", "assets", "audit"], + }, + }, setup(props) { return { - subtab: ref("summary"), + subtab: ref(props.activeTabs[0]), }; }, }; diff --git a/web/src/components/agents/AgentActionMenu.vue b/web/src/components/agents/AgentActionMenu.vue new file mode 100644 index 0000000000..844c0029f7 --- /dev/null +++ b/web/src/components/agents/AgentActionMenu.vue @@ -0,0 +1,511 @@ + + + \ No newline at end of file diff --git a/web/src/components/agents/AutomatedTasksTab.vue b/web/src/components/agents/AutomatedTasksTab.vue index 34ff72a28e..0193706cc3 100644 --- a/web/src/components/agents/AutomatedTasksTab.vue +++ b/web/src/components/agents/AutomatedTasksTab.vue @@ -249,8 +249,7 @@ import { notifySuccess, notifyError } from "@/utils/notify"; import { truncateText } from "@/utils/format"; // ui imports -import AddAutomatedTask from "@/components/tasks/AddAutomatedTask"; -import EditAutomatedTask from "@/components/tasks/EditAutomatedTask"; +import AutomatedTaskForm from "@/components/tasks/AutomatedTaskForm"; import ScriptOutput from "@/components/checks/ScriptOutput"; // static data @@ -380,7 +379,7 @@ export default { function showAddTask() { $q.dialog({ - component: AddAutomatedTask, + component: AutomatedTaskForm, componentProps: { parent: { agent: selectedAgent.value }, }, @@ -393,9 +392,10 @@ export default { if (task.managed_by_policy) return; $q.dialog({ - component: EditAutomatedTask, + component: AutomatedTaskForm, componentProps: { task: task, + parent: { agent: selectedAgent.value }, }, }).onOk(() => { getTasks(); diff --git a/web/src/components/agents/ChecksTab.vue b/web/src/components/agents/ChecksTab.vue index 71fc136b2a..d8511d92ed 100644 --- a/web/src/components/agents/ChecksTab.vue +++ b/web/src/components/agents/ChecksTab.vue @@ -399,7 +399,7 @@ export default { const result = await resetCheck(check.id); await getChecks(); notifySuccess(result); - refreshDashboard(); + refreshDashboard(false /* clearTreeSelected */, false /* clearSubTable */); } catch (e) { console.error(e); } diff --git a/web/src/components/agents/SummaryTab.vue b/web/src/components/agents/SummaryTab.vue index b42efee6d6..88492b867c 100644 --- a/web/src/components/agents/SummaryTab.vue +++ b/web/src/components/agents/SummaryTab.vue @@ -4,13 +4,37 @@
- - + + {{ summary.hostname }} Maintenance Mode • {{ summary.operating_system }} • Agent v{{ summary.version }} - - + + + + + + + +
@@ -120,17 +144,25 @@ \ No newline at end of file diff --git a/web/src/components/integrations/bitdefender/Bitdefender.vue b/web/src/components/integrations/bitdefender/Bitdefender.vue new file mode 100644 index 0000000000..bce3a2311b --- /dev/null +++ b/web/src/components/integrations/bitdefender/Bitdefender.vue @@ -0,0 +1,174 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/bitdefender/BitdefenderDashboard.vue b/web/src/components/integrations/bitdefender/BitdefenderDashboard.vue new file mode 100644 index 0000000000..9420c37f8b --- /dev/null +++ b/web/src/components/integrations/bitdefender/BitdefenderDashboard.vue @@ -0,0 +1,249 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/integrations/bitdefender/ScanEndpointConfirm.vue b/web/src/components/integrations/bitdefender/ScanEndpointConfirm.vue new file mode 100644 index 0000000000..128bdeefb7 --- /dev/null +++ b/web/src/components/integrations/bitdefender/ScanEndpointConfirm.vue @@ -0,0 +1,68 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/bitdefender/modals/QuarantineView.vue b/web/src/components/integrations/bitdefender/modals/QuarantineView.vue new file mode 100644 index 0000000000..ef1a867f5d --- /dev/null +++ b/web/src/components/integrations/bitdefender/modals/QuarantineView.vue @@ -0,0 +1,191 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/bitdefender/modals/QuickScanConfirmModal.vue b/web/src/components/integrations/bitdefender/modals/QuickScanConfirmModal.vue new file mode 100644 index 0000000000..48f32760cd --- /dev/null +++ b/web/src/components/integrations/bitdefender/modals/QuickScanConfirmModal.vue @@ -0,0 +1,52 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/bitdefender/modals/ScanTasksView.vue b/web/src/components/integrations/bitdefender/modals/ScanTasksView.vue new file mode 100644 index 0000000000..1911f174c0 --- /dev/null +++ b/web/src/components/integrations/bitdefender/modals/ScanTasksView.vue @@ -0,0 +1,150 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/meraki/Meraki.vue b/web/src/components/integrations/meraki/Meraki.vue new file mode 100644 index 0000000000..a6d855e3a3 --- /dev/null +++ b/web/src/components/integrations/meraki/Meraki.vue @@ -0,0 +1,199 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/meraki/MerakiDashboard.vue b/web/src/components/integrations/meraki/MerakiDashboard.vue new file mode 100644 index 0000000000..a6d855e3a3 --- /dev/null +++ b/web/src/components/integrations/meraki/MerakiDashboard.vue @@ -0,0 +1,199 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/meraki/events/NetworkEventsTable.vue b/web/src/components/integrations/meraki/events/NetworkEventsTable.vue new file mode 100644 index 0000000000..21d6a5a6c4 --- /dev/null +++ b/web/src/components/integrations/meraki/events/NetworkEventsTable.vue @@ -0,0 +1,224 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/meraki/organization/Overview.vue b/web/src/components/integrations/meraki/organization/Overview.vue new file mode 100644 index 0000000000..7a2dc5c714 --- /dev/null +++ b/web/src/components/integrations/meraki/organization/Overview.vue @@ -0,0 +1,300 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/meraki/organization/TopClientsTable.vue b/web/src/components/integrations/meraki/organization/TopClientsTable.vue new file mode 100644 index 0000000000..010ca79130 --- /dev/null +++ b/web/src/components/integrations/meraki/organization/TopClientsTable.vue @@ -0,0 +1,313 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/meraki/traffic/NetworkApplicationTrafficTable.vue b/web/src/components/integrations/meraki/traffic/NetworkApplicationTrafficTable.vue new file mode 100644 index 0000000000..f377643015 --- /dev/null +++ b/web/src/components/integrations/meraki/traffic/NetworkApplicationTrafficTable.vue @@ -0,0 +1,349 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/meraki/traffic/NetworkClientsTrafficTable.vue b/web/src/components/integrations/meraki/traffic/NetworkClientsTrafficTable.vue new file mode 100644 index 0000000000..3e197dd52f --- /dev/null +++ b/web/src/components/integrations/meraki/traffic/NetworkClientsTrafficTable.vue @@ -0,0 +1,399 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/modals/IntegrationConfigModal.vue b/web/src/components/integrations/modals/IntegrationConfigModal.vue new file mode 100644 index 0000000000..e34a4519cd --- /dev/null +++ b/web/src/components/integrations/modals/IntegrationConfigModal.vue @@ -0,0 +1,153 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/snipeit/Checkin.vue b/web/src/components/integrations/snipeit/Checkin.vue new file mode 100644 index 0000000000..eea5920713 --- /dev/null +++ b/web/src/components/integrations/snipeit/Checkin.vue @@ -0,0 +1,149 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/snipeit/Checkout.vue b/web/src/components/integrations/snipeit/Checkout.vue new file mode 100644 index 0000000000..ca9a8ca17a --- /dev/null +++ b/web/src/components/integrations/snipeit/Checkout.vue @@ -0,0 +1,230 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/snipeit/SnipeIT.vue b/web/src/components/integrations/snipeit/SnipeIT.vue new file mode 100644 index 0000000000..40ce6f5592 --- /dev/null +++ b/web/src/components/integrations/snipeit/SnipeIT.vue @@ -0,0 +1,306 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/snipeit/SnipeITDashboard.vue b/web/src/components/integrations/snipeit/SnipeITDashboard.vue new file mode 100644 index 0000000000..31b3d7b2b1 --- /dev/null +++ b/web/src/components/integrations/snipeit/SnipeITDashboard.vue @@ -0,0 +1,315 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/integrations/snipeit/modals/AddAsset.vue b/web/src/components/integrations/snipeit/modals/AddAsset.vue new file mode 100644 index 0000000000..2cfba214fe --- /dev/null +++ b/web/src/components/integrations/snipeit/modals/AddAsset.vue @@ -0,0 +1,326 @@ + + + \ No newline at end of file diff --git a/web/src/components/integrations/snipeit/modals/AddModel.vue b/web/src/components/integrations/snipeit/modals/AddModel.vue new file mode 100644 index 0000000000..4ac5aec5b5 --- /dev/null +++ b/web/src/components/integrations/snipeit/modals/AddModel.vue @@ -0,0 +1,80 @@ + + + \ No newline at end of file diff --git a/web/src/components/logs/PendingActions.vue b/web/src/components/logs/PendingActions.vue index 693d7c85c8..c85ab2fd08 100644 --- a/web/src/components/logs/PendingActions.vue +++ b/web/src/components/logs/PendingActions.vue @@ -94,6 +94,7 @@ \ No newline at end of file diff --git a/web/src/components/modals/agents/EditAgent.vue b/web/src/components/modals/agents/EditAgent.vue index 1e0bfd3bcd..01ca22e26b 100644 --- a/web/src/components/modals/agents/EditAgent.vue +++ b/web/src/components/modals/agents/EditAgent.vue @@ -226,11 +226,6 @@ export default { editAgent() { delete this.agent.all_timezones; delete this.agent.timezone; - delete this.agent.winupdatepolicy[0].created_by; - delete this.agent.winupdatepolicy[0].created_time; - delete this.agent.winupdatepolicy[0].modified_by; - delete this.agent.winupdatepolicy[0].modified_time; - delete this.agent.winupdatepolicy[0].policy; // only send the timezone data if it has changed // this way django will keep the db column as null and inherit from the global setting diff --git a/web/src/components/modals/coresettings/UserPreferences.vue b/web/src/components/modals/coresettings/UserPreferences.vue index 0ebe97f6f3..972dfb9f7e 100644 --- a/web/src/components/modals/coresettings/UserPreferences.vue +++ b/web/src/components/modals/coresettings/UserPreferences.vue @@ -1,108 +1,110 @@ \ No newline at end of file diff --git a/web/src/components/tasks/AutomatedTaskForm.vue b/web/src/components/tasks/AutomatedTaskForm.vue new file mode 100644 index 0000000000..77580999c6 --- /dev/null +++ b/web/src/components/tasks/AutomatedTaskForm.vue @@ -0,0 +1,969 @@ + + + + + \ No newline at end of file diff --git a/web/src/components/tasks/EditAutomatedTask.vue b/web/src/components/tasks/EditAutomatedTask.vue deleted file mode 100644 index 9b65b3a332..0000000000 --- a/web/src/components/tasks/EditAutomatedTask.vue +++ /dev/null @@ -1,181 +0,0 @@ - - - \ No newline at end of file diff --git a/web/src/components/ui/ExportTableBtn.vue b/web/src/components/ui/ExportTableBtn.vue index 107739d34c..f7cf0e9117 100644 --- a/web/src/components/ui/ExportTableBtn.vue +++ b/web/src/components/ui/ExportTableBtn.vue @@ -1,5 +1,5 @@ @@ -15,7 +15,7 @@ export default { }, setup(props) { return { - export: () => exportTableToCSV(props.data, props.columns), + exportTable: () => exportTableToCSV(props.data, props.columns), }; }, }; diff --git a/web/src/composables/checks.js b/web/src/composables/checks.js index 5bbc68b4a3..cf66d4d50b 100644 --- a/web/src/composables/checks.js +++ b/web/src/composables/checks.js @@ -104,6 +104,10 @@ export function useCheckDropdown() { const checkOptions = ref([]) async function getCheckOptions({ agent, policy }, flat = false) { + if (!agent && !policy) { + console.error("Need to specify agent or policy object when calling getCheckOptions") + return + } checkOptions.value = formatCheckOptions(agent ? await fetchAgentChecks(agent) : await fetchPolicyChecks(policy), flat) } diff --git a/web/src/index.template.html b/web/src/index.template.html index 2e48282117..6d03261dac 100644 --- a/web/src/index.template.html +++ b/web/src/index.template.html @@ -2,9 +2,12 @@ - <%= productName %> + + <%= productName %> + + diff --git a/web/src/layouts/MainLayout.vue b/web/src/layouts/MainLayout.vue new file mode 100644 index 0000000000..86a60057c9 --- /dev/null +++ b/web/src/layouts/MainLayout.vue @@ -0,0 +1,233 @@ + + \ No newline at end of file diff --git a/web/src/router/index.js b/web/src/router/index.js index 1d5f4d1f5b..eb0ae1c8c6 100644 --- a/web/src/router/index.js +++ b/web/src/router/index.js @@ -1,6 +1,13 @@ import { createRouter, createMemoryHistory, createWebHistory, createWebHashHistory } from 'vue-router' import routes from './routes'; +// useful for importing router outside of vue components +// import {router} from "@/router" +export const router = new createRouter({ + routes, + history: createWebHistory(process.env.VUE_ROUTER_BASE) +}) + export default function ({ store }) { const createHistory = process.env.SERVER ? createMemoryHistory diff --git a/web/src/router/routes.js b/web/src/router/routes.js index 3d36372e96..4cd141ecc8 100644 --- a/web/src/router/routes.js +++ b/web/src/router/routes.js @@ -1,11 +1,26 @@ const routes = [ { path: "/", - name: "Dashboard", - component: () => import("@/views/Dashboard"), - meta: { - requireAuth: true - } + name: "MainLayout", + component: () => import("@/layouts/MainLayout"), + children: [ + { + path: "agents/:agent_id", + name: "Agent", + component: () => import("@/views/Agent"), + meta: { + requireAuth: true + } + }, + { + path: "", + name: "Dashboard", + component: () => import("@/views/Dashboard"), + meta: { + requireAuth: true + } + }, + ] }, { path: "/setup", diff --git a/web/src/store/index.js b/web/src/store/index.js index dc5a0fabfd..889a31192a 100644 --- a/web/src/store/index.js +++ b/web/src/store/index.js @@ -1,5 +1,5 @@ import { createStore } from 'vuex' -import { Screen } from 'quasar' +import { Screen, Dark, LoadingBar } from 'quasar' import axios from "axios"; export default function () { @@ -8,12 +8,14 @@ export default function () { return { username: localStorage.getItem("user_name") || null, token: localStorage.getItem("access_token") || null, - clients: {}, tree: [], + agents: [], treeReady: false, + selectedTree: "", selectedRow: null, agentTableLoading: false, needrefresh: false, + refreshSummaryTab: false, tableHeight: "300px", tabHeight: "300px", showCommunityScripts: false, @@ -23,7 +25,10 @@ export default function () { clientTreeSort: "alphafail", clientTreeSplitter: 20, noCodeSign: false, - hosted: false + hosted: false, + clearSearchWhenSwitching: false, + currentTRMMVersion: null, + latestTRMMVersion: null } }, getters: { @@ -39,14 +44,8 @@ export default function () { showCommunityScripts(state) { return state.showCommunityScripts; }, - needRefresh(state) { - return state.needrefresh; - }, - agentTableHeight(state) { - return state.tableHeight; - }, - tabsTableHeight(state) { - return state.tabHeight; + allClientsSelected(state) { + return !state.selectedTree; }, }, mutations: { @@ -64,9 +63,6 @@ export default function () { state.token = null; state.username = null; }, - getUpdatedSites(state, clients) { - state.clients = clients; - }, loadTree(state, treebar) { state.tree = treebar; state.treeReady = true; @@ -104,6 +100,24 @@ export default function () { }, SET_HOSTED(state, val) { state.hosted = val + }, + setClearSearchWhenSwitching(state, val) { + state.clearSearchWhenSwitching = val + }, + setLatestTRMMVersion(state, val) { + state.latestTRMMVersion = val + }, + setCurrentTRMMVersion(state, val) { + state.currentTRMMVersion = val + }, + setAgents(state, agents) { + state.agents = agents + }, + setRefreshSummaryTab(state, val) { + state.refreshSummaryTab = val + }, + setSelectedTree(state, val) { + state.selectedTree = val } }, actions: { @@ -119,14 +133,53 @@ export default function () { }) .catch(e => { }) }, - getDashInfo(context) { - return axios.get("/core/dashinfo/"); + refreshDashboard({ state, commit, dispatch }, clearTreeSelected = false) { + if (clearTreeSelected || !state.selectedTree) { + dispatch("loadAgents") + commit("setSelectedTree", "") + } + else if (state.selectedTree.includes("Client")) { + dispatch("loadAgents", `?client=${state.selectedTree.split("|")[1]}`) + } + else if (state.selectedTree.includes("Site")) { + dispatch("loadAgents", `?site=${state.selectedTree.split("|")[1]}`) + } else { + console.error("refreshDashboard has incorrect parameters") + return + } + + if (clearTreeSelected) commit("destroySubTable") + + dispatch("loadTree"); + dispatch("getDashInfo", false); + }, + async loadAgents(context, params = null) { + context.commit("AGENT_TABLE_LOADING", true); + try { + const { data } = await axios.get(`/agents/${params ? params : ""}`) + context.commit("setAgents", data); + } catch (e) { + console.error(e) + } + + context.commit("AGENT_TABLE_LOADING", false); }, - getUpdatedSites(context) { - axios.get("/clients/").then(r => { - context.commit("getUpdatedSites", r.data); - }) - .catch(e => { }); + async getDashInfo(context, edited = true) { + const { data } = await axios.get("/core/dashinfo/"); + if (edited) { + LoadingBar.setDefaults({ color: data.loading_bar_color }); + context.commit("setClearSearchWhenSwitching", data.clear_search_when_switching); + context.commit("SET_DEFAULT_AGENT_TBL_TAB", data.default_agent_tbl_tab); + context.commit("SET_CLIENT_TREE_SORT", data.client_tree_sort); + context.commit("SET_CLIENT_SPLITTER", data.client_tree_splitter); + } + Dark.set(data.dark_mode); + context.commit("setCurrentTRMMVersion", data.trmm_version); + context.commit("setLatestTRMMVersion", data.latest_trmm_ver); + context.commit("SET_AGENT_DBLCLICK_ACTION", data.dbl_click_action); + context.commit("SET_URL_ACTION", data.url_action); + context.commit("setShowCommunityScripts", data.show_community_scripts); + context.commit("SET_HOSTED", data.hosted); }, loadTree({ commit, state }) { axios.get("/clients/").then(r => { diff --git a/web/src/utils/format.js b/web/src/utils/format.js index 8541d57843..cfe2befe3f 100644 --- a/web/src/utils/format.js +++ b/web/src/utils/format.js @@ -1,4 +1,5 @@ import { date } from "quasar"; +import { validateTimePeriod } from "@/utils/validation" // dropdown options formatting @@ -198,6 +199,11 @@ export function dateStringToUnix(drfString) { return parseInt(date.formatDate(d, "X")); } +// takes a unix timestamp and converts it to quasar datetime field value YYYY-MM-DD HH:mm:ss +export function formatDateInputField(unixtimestamp) { + return date.formatDate(unixtimestamp, "YYYY-MM-DD HH:mm:ss") +} + // string formatting export function capitalize(string) { @@ -232,3 +238,51 @@ export function convertMemoryToPercent(percent, memory) { const mb = memory * 1024; return Math.ceil((percent * mb) / 100).toLocaleString(); } + +// convert time period(str) to seconds(int) (3h -> 10800) used for comparing time intervals +export function convertPeriodToSeconds(period) { + if (!validateTimePeriod(period)) { + console.error("Time Period is invalid") + return NaN + } + + if (period.toUpperCase().includes("S")) + // remove last letter from string and return since already in seconds + return parseInt(period.slice(0, -1)) + else if (period.toUpperCase().includes("M")) + // remove last letter from string and multiple by 60 to get seconds + return parseInt(period.slice(0, -1)) * 60 + else if (period.toUpperCase().includes("H")) + // remove last letter from string and multiple by 60 twice to get seconds + return parseInt(period.slice(0, -1)) * 60 * 60 + else if (period.toUpperCase().includes("D")) + // remove last letter from string and multiply by 24 and 60 twice to get seconds + return parseInt(period.slice(0, -1)) * 24 * 60 * 60 +} + +// takes an integer and converts it to an array in binary format. i.e: 13 -> [8, 4, 1] +// Needed to work with multi-select fields in tasks form +export function convertToBitArray(number) { + let bitArray = [] + let binary = number.toString(2) + for (let i = 0; i < binary.length; ++i) { + if (binary[i] !== "0") { + // last binary digit + if (binary.slice(i).length === 1) { + bitArray.push(1) + } else { + bitArray.push(parseInt(binary.slice(i), 2) - parseInt(binary.slice(i + 1), 2)) + } + } + } + return bitArray +} + +// takes an array of integers and adds them together +export function convertFromBitArray(array) { + let result = 0 + for (let i = 0; i < array.length; i++) { + result += array[i] + } + return result +} \ No newline at end of file diff --git a/web/src/utils/validation.js b/web/src/utils/validation.js index 8f8ce7a6d2..74daad48d4 100644 --- a/web/src/utils/validation.js +++ b/web/src/utils/validation.js @@ -34,4 +34,8 @@ export function validateEventID(val) { // validate script return code export function validateRetcode(val, done) { /^\d+$/.test(val) ? done(val) : done(); +} + +export function validateTimePeriod(val) { + return /^\d{1,3}(H|h|M|m|S|s|d|D)$/.test(val); } \ No newline at end of file diff --git a/web/src/views/Agent.vue b/web/src/views/Agent.vue new file mode 100644 index 0000000000..1265bba63b --- /dev/null +++ b/web/src/views/Agent.vue @@ -0,0 +1,49 @@ + + + \ No newline at end of file diff --git a/web/src/views/Dashboard.vue b/web/src/views/Dashboard.vue index 524103ed06..f32b83a417 100644 --- a/web/src/views/Dashboard.vue +++ b/web/src/views/Dashboard.vue @@ -1,469 +1,351 @@