from .models import DeploymentWorkflow, Summary from .models import OrchestrationWorkflow from datetime import datetime from django.apps import apps from django.db import connection from django.core import serializers from django.utils import timezone def count(): queryset = DeploymentWorkflow.objects.all() in_progress_clusters = 0 failed_clusters = 0 completed_clusters = 0 ingested = 0 online = 0 bmc = 0 firmware_scheduled = 0 firmware_upgraded = 0 wr_scheduled = 0 wr_installed = 0 for workflow in queryset: if workflow.wr_installed: completed_clusters = completed_clusters + 1 else: in_progress_clusters = in_progress_clusters + 1 # summary.failed = failed_clusters if workflow.ingested: ingested = ingested + 1 if workflow.online: online = online + 1 if workflow.bmc: bmc = bmc + 1 if workflow.firmware_scheduled and not workflow.firmware_upgraded: firmware_scheduled = firmware_scheduled + 1 if workflow.firmware_upgraded: firmware_upgraded = firmware_upgraded + 1 if workflow.wr_scheduled and not workflow.wr_installed: wr_scheduled = wr_scheduled + 1 if workflow.wr_installed: wr_installed = wr_installed + 1 summary = Summary() summary.clusters = len(queryset) summary.in_progress = in_progress_clusters summary.completed = completed_clusters summary.ingested = ingested summary.online = online summary.bmc = bmc summary.firmware_scheduled = firmware_scheduled summary.firmware_upgraded = firmware_upgraded summary.wr_scheduled = wr_scheduled summary.wr_installed = wr_installed summary.created_at = timezone.now() print(summary) try: summary.save() except Exception as e: print(e) def summary(): print("**** running cron: summary **** : {}".format(datetime.now())) servers = apps.get_model('caas', 'Server') query_set = servers.objects.select_related('cluster').select_related('blade') for server in query_set: # Set server id and date status = DeploymentWorkflow() status.cluster = server.cluster status.created_at = timezone.now() # CIQ ingestion status.ingested = True # Server online check status.online = True if server.blade_id else False #BMC done check if server.pxe_mac_address and server.intel_nic_firmware_version: status.bmc = True # Check Firmware schedule and installation status # Get server list from Server = apps.get_model('caas', 'Server') server = Server.objects.get(cluster=server.cluster) FirmwareUpgradeSchedule = apps.get_model('caas', 'FirmwareUpgradeSchedule') try: firmware_schedule = FirmwareUpgradeSchedule.objects.get(server=server) # Firmware installation Scheduled and completiong check status.firmware_scheduled = True if firmware_schedule.date_scheduled else False status.firmware_upgraded = True if firmware_schedule.date_completed else False except FirmwareUpgradeSchedule.DoesNotExist: status.firmware_schedule = False status.firmware_upgraded = False except Exception as e: print(e) # Check WindRiver schedule and installation status WrInstallSchedule = apps.get_model('caas', 'WrInstallSchedule') try: wr_schedule = WrInstallSchedule.objects.select_related('cluster').get(cluster=server.cluster) # WindRiver installation Scheduled and completiong check status.wr_scheduled = True if wr_schedule.date_scheduled else False status.wr_installed = True if wr_schedule.date_completed else False except WrInstallSchedule.DoesNotExist: status.wr_scheduled = False status.wr_installed = False except Exception as e: print(e) # Save status object status.save() count() def orchestration_summary(): print("**** running cron: orchestration_summary **** : {}".format(datetime.now())) regions = apps.get_model('orchestration', 'remoteregionsetup') status = OrchestrationWorkflow() # Namespace count and Timestamp status.namespaces = regions.objects.count() status.created_at = timezone.now() # Service accounts status.orch_service_account = regions.objects.filter(serviceaccount__in=['orchestration-sa', 'SVC-FE-Atlas']).count() status.edge_eng_service_account = regions.objects.filter(serviceaccount='SVC-Edge-Eng').count() + regions.objects.filter(serviceaccount__contains='application-sa-').count() status.samsung_service_account = regions.objects.filter(serviceaccount='samsung-sa').count() # Orchestration Kubeconfigs status.orch_kubeconfig = regions.objects.filter(serviceaccount__in=['orchestration-sa', 'SVC-FE-Atlas']).exclude(kubeconfig='').count() # Edge engineering Kubeconfigs status.edge_eng_kubeconfig = regions.objects.filter(serviceaccount='SVC-Edge-Eng').exclude(kubeconfig='').count() status.edge_eng_kubeconfig += regions.objects.filter(serviceaccount__contains='application-sa-').exclude(kubeconfig='').count() # Samsung Kubeconfigs status.samsung_kubeconfig= regions.objects.filter(serviceaccount__in=['orchestration-sa', 'SVC-FE-Atlas']).exclude(kubeconfig='').count() # Uncomment and use once Dev completes tracking on his side # Setting to 0 for now status.data_network_setup = 0 status.save()