import json

from django.db.models import Count
from jet.dashboard.modules import DashboardModule
import platform
import psutil

from cmdb.models import Host
from deploy_manager.models import Project


class OverView(DashboardModule):
    title = '基础信息'
    title_url = '#'
    template = 'overview.html'

    def init_with_context(self, context):
        upMinionCount = Host.objects.filter(minion_status=1).count()
        downMinionCount = Host.objects.filter(minion_status=0).count()
        self.hostname = platform.node()
        self.system_info = '%s, %s, %s' % (
            platform.system(),
            ' '.join(platform.linux_distribution()),
            platform.release())
        self.arch = ' '.join(platform.architecture())
        self.procesor = platform.processor(),
        self.py_version = platform.python_version()
        self.host_count = Host.objects.count()
        self.buss_count = Project.objects.count()
        self.minions_status = '运行中 %s,未运行 %s' % (upMinionCount, downMinionCount)


class HostResourceOverView(DashboardModule):
    title = '资源使用率'
    title_url = '#'
    template = 'host_resource_overview.html'

    def init_with_context(self, context):
        ram = psutil.virtual_memory().percent
        cpu = psutil.cpu_percent()
        green, orange, red, grey = '#00FF38', '#FFB400', '#FF3B00', '#EBEBEB'

        ram_color = green
        if ram >= 75:
            ram_color = red
        elif ram >= 50:
            ram_color = orange

        cpu_color = green
        if cpu >= 75:
            cpu_color = red
        elif cpu >= 50:
            cpu_color = orange

        self.cpu_idel = 100 - cpu
        self.cpu_color = cpu_color
        self.cpu = cpu
        self.ram = 100 - ram
        self.ram_used = ram
        self.ram_color = ram_color

    class Media:
        js = ('admin/js/jquery.js', 'js/highcharts.js',)


class HostTypeOverView(DashboardModule):
    title = '操作系统分布'
    title_url = '#'
    template = 'host_type_overview.html'

    def init_with_context(self, context):
        result = Host.objects.values('os').annotate(total=Count('os'))

        os = []
        total = []
        for obj in result:
            os.append(obj['os'])
            total.append(obj['total'])
        self.os = os
        self.total = total

        class Media:
            js = ('admin/js/jquery.js', 'js/highcharts.js',)