def handle(self, *args, **options):
        msg = "QRBA API version: " + str(settings.QUMULO_API_VERSION)
        print(msg)
        (conninfo, creds) = qlogin(settings.QUMULO_devcluster['ipaddr'],
                                   'admin',
                                   settings.QUMULO_devcluster['adminpassword'],
                                   settings.QUMULO_devcluster['port'])
        if not conninfo:
            msg = "could not connect to cluster " + str(self.name)
            logger.critical(msg)
            sys.exit(-1)
        qr = qumulo.rest.version.version(conninfo, None)
        msg = "cluster API version: " + str(qr)

        qr = Cluster.objects.filter(name=settings.QUMULO_devcluster['name'])
        if qr.count() == 0:
            cluster = Cluster(
                name=settings.QUMULO_devcluster['name'],
                ipaddr=settings.QUMULO_devcluster['ipaddr'],
                adminpassword=settings.QUMULO_devcluster['adminpassword'],
                port=settings.QUMULO_devcluster['port'])
            cluster.save()
        else:
            cluster = qr[0]

        msg = cluster.remove_all_cluster_items()
        print(msg)
    def handle(self, *args, **options):
        qr = Cluster.objects.filter(name=settings.QUMULO_prodcluster['name'])
        if qr.count() == 0:
            cluster = Cluster(name=settings.QUMULO_prodcluster['name'], ipaddr=settings.QUMULO_prodcluster['ipaddr'],
                              adminpassword=settings.QUMULO_prodcluster['adminpassword'], port=8000)
            cluster.save()
        else:
            cluster = qr[0]

        cluster. in
    def handle(self, *args, **options):

        creator_msg = "load_host_activity_test_data"
        (conninfo,
         creds) = qlogin(settings.QUMULO_devcluster['ipaddr'], 'admin',
                         settings.QUMULO_devcluster['adminpassword'], 8000)
        if not conninfo:
            msg = "could not connect to dev cluster  ... exiting"
            logger.critical(msg)
            sys.exit(-1)

        qr = Cluster.objects.filter(name=settings.QUMULO_devcluster['name'])
        if qr.count() == 0:
            cluster = Cluster(
                name=settings.QUMULO_devcluster['name'],
                ipaddr=settings.QUMULO_devcluster['ipaddr'],
                adminpassword=settings.QUMULO_devcluster['adminpassword'],
                port=8000)
            cluster.save()
        else:
            cluster = qr[0]

        data = ''
        filename = options['filename']
        for line in fileinput.input(filename):
            data = data + line
        data = json.loads(data)
        sample = request.RestResponse(data, 'etag')
        dt = datetime.datetime.utcnow()
        dt = dt.replace(tzinfo=pytz.UTC)
        cluster.load_activity_sample(conninfo=conninfo,
                                     creds=creds,
                                     sample=sample,
                                     validtime=dt)
示例#4
0
    def handle(self, *args, **options):

        creator_msg = "load_host_activity_test_data"
        (conninfo,
         creds) = qlogin(settings.QUMULO_devcluster['ipaddr'], 'admin',
                         settings.QUMULO_devcluster['adminpassword'], 8000)
        if not conninfo:
            msg = "could not connect to dev cluster  ... exiting"
            logger.critical(msg)
            sys.exit(-1)

        qr = Cluster.objects.filter(name=settings.QUMULO_devcluster['name'])
        if qr.count() == 0:
            cluster = Cluster(
                name=settings.QUMULO_devcluster['name'],
                ipaddr=settings.QUMULO_devcluster['ipaddr'],
                adminpassword=settings.QUMULO_devcluster['adminpassword'],
                port=8000)
            cluster.save()
        else:
            cluster = qr[0]

        filename = options['filename']
        numdays = options['days_in_dataset']
        for d in range(int(numdays), 0, -1):
            data = ''
            for line in fileinput.input(filename):
                if "rate" in str(line):
                    # "rate": 1,
                    val = str(line).split(':')
                    val = val[1].replace(",", "")
                    val = float(val) * random.random()
                    line = '"rate": ' + str(val) + ","
                data = data + line
            data = json.loads(data)
            sample = request.RestResponse(data, 'etag')
            dt = datetime.datetime.utcnow()
            dt = dt.replace(tzinfo=pytz.UTC)
            dt = dt - datetime.timedelta(days=d)
            cluster.load_activity_sample(conninfo=conninfo,
                                         creds=creds,
                                         sample=sample,
                                         validtime=dt)
    def handle(self, *args, **options):
        msg = "QRBA API version: " + str(settings.QUMULO_API_VERSION)
        print(msg)
        (conninfo, creds) = qlogin(settings.QUMULO_devcluster['ipaddr'], 'admin',
                                   settings.QUMULO_devcluster['adminpassword'], settings.QUMULO_devcluster['port'])
        if not conninfo:
            msg = "could not connect to cluster " + str(self.name)
            logger.critical(msg)
            sys.exit(-1)
        qr = qumulo.rest.version.version(conninfo, None)
        msg = "cluster API version: " + str(qr)


        qr = Cluster.objects.filter(name=settings.QUMULO_devcluster['name'])
        if qr.count() == 0:
            cluster = Cluster(name=settings.QUMULO_devcluster['name'], ipaddr=settings.QUMULO_devcluster['ipaddr'],
                              adminpassword=settings.QUMULO_devcluster['adminpassword'], port=8000)
            cluster.save()
        else:
            cluster = qr[0]

        # load all activitytype objects
        for key, val in ACTIVITY_CHOICES:
            qs = ActivityType.objects.filter(activitytype=val, id=key)
            if qs.count() == 0:
                at = ActivityType(activitytype=val)
                at.save()

        for key, val in DAYS_IN_DATASET:
            qs = DaysInDataset.objects.filter(label=val, days=key)
            if qs.count() == 0:
                dds = DaysInDataset(label=val, days=key)
                dds.save()

        for key, val in CLUSTER_TIME_SERIES_CHOICES:
            qs = ClusterTimeSeriesType.objects.filter(activitytype=val, id=key)
            if qs.count() == 0:
                ctst = ClusterTimeSeriesType(activitytype=val)
                ctst.save()

        # Insure the placeholder Organization, IPzone, Host, Quota, and Restriction exist (needed for 'individual_hosts' to work
        # Leading '#' is used to force these objects to top of the sort order
        qr = Host.objects.filter(name=settings.NONE_NAME)
        if qr.count() < 1:
            qr = Organization.objects.filter(name=settings.NONE_NAME)
            if qr.count() < 1:
                now = datetime.datetime.utcnow()
                norg = Organization(name=settings.NONE_NAME)
                norg.save()
                msg = str(now) + ":Organization:" + str(settings.NONE_NAME) + ":initialize_system"
                logger.info(msg)
            else:
                norg = qr[0]

            zname = 'immutable' + settings.NONE_NAME
            nipz = IPzone(name=zname, organization=norg, ipaddrs=settings.LOCALHOST, creator="initialize_system")
            nipz.save()
            nipz.set_ipzone_marker()
            nipz.set_immutable(True)
            now = datetime.datetime.utcnow()
            msg = str(now) + ":IPzone:" + str(nipz.name) + ":initialize_system"
            logger.info(msg)
            lh = Host(name=settings.NONE_NAME, ipaddr='0.0.0.0', ipzone_id=nipz.id, organization=norg)
            lh.save()
            nquota = Quota(name=settings.NONE_NAME, qid=0, creator="initialize_system")
            nquota.save()
            now = datetime.datetime.utcnow()
            msg = str(now) + ":Quota:" + str(nquota.name) + ":initialize_system"
            logger.info(msg)
            lhr = Restriction(name='localhost', readonly=True, usermapping='None', usermapid=0, do_not_delete=True,
                              creator="initialize_system")
            lhr.save()
            now = datetime.datetime.utcnow()
            msg = str(now) + ":Restriction:" + str(lhr.name) + ":initialize_system"
            logger.info(msg)
            lhr.set_organization(norg)
            lhr.ipzone = nipz
            lhr.individual_hosts.add(lh)
            lhr.save()


        dnsdomains = DNSdomain.objects.all()
        if dnsdomains.count() == 0:
            domains = ["d1.org.tld", "d2.org.tld", "org.private"]
            for domain in domains:
                dnsd = DNSdomain(name=domain)
                dnsd.save()
                dnsd.get_dcs_from_msdcs()
                dnsd.save()

                if cluster.alive() is False:
                    print("  could not connect to cluster " + str(cluster) + "  exiting!! ")
                    sys.exit(-1)
                else:
                    dcs = dnsd.get_windcs()
                    for dc in dcs:
                        wdc = WinDC.objects.filter(name=dc)
                        if wdc.count() == 0:
                            wc = WinDC(name=dc, dnsdomain=dnsd)
                            wc.save()



        print("   cluster is " + str(cluster))

        # insure that a 'None' Quota exists -- it will be used when no quota is desired
        qr = Quota.objects.filter(name=settings.NONE_NAME)
        if qr.count() == 0:
            norg = Organization.objects.filter(name='#None')
            if norg.count() == 0:
                norg = Organization(name='#None')
                norg.save()
            else:
                norg = norg[0]
            nonequota = Quota(name=settings.NONE_NAME, size=0, creator="initialize_system")
            nonequota.save()
            nonequota.set_organization(norg)

        organizations = Organization.objects.get_queryset()
        # print("organizations: " + str(organizations))
        now = timezone.now() + datetime.timedelta(days=30)
        # print("now: " + str(now))
        for org in organizations:
            print("calling " + str(org) + ".check_hosts() at " + str(now))
            state = org.check_hosts()
            print(str(org) + ".check_hosts() returned " + str(state))
            print("calling " + str(org) + ".check_ipzones() at " + str(now))
            state = org.check_ipzones()
            print(str(org) + ".check_ipzones() returned " + str(state))

        dcs = WinDC.objects.all()
        # dcs = [WinDC.objects.first()]
        print("    dcs are: " + str(dcs))
        now = timezone.now() + datetime.timedelta(days=30)
        print("        now: " + str(now))
        domainnames = []
        for dc in dcs:
            if str(dc.dnsdomain) in str(domainnames):
                print(str(dc.name) + " already processed")
                continue
            else:
                domainnames.append(str(dc.dnsdomain))
            state = dc.load_neworgs(cluster)
            orgs = dc.get_orgs()
            print("           " + str(dc) + ".load_neworgs( " + str(cluster) + " ) at " + str(now) + " returned " + str(
                state) + " and get_orgs found " + str(len(orgs)) + " orgs")

            if state is True:
                state = dc.load_newipzones()

            if state is True:
                ipzones = dc.get_ipzones()
                print("           " + str(dc) + ".load_newipzones() at " + str(now) + " returned " + str(
                    state) + " and found " + str(len(ipzones)) + " ipzones ")

            hosts = []
            if state is True:
                dc.load_newhosts()
                hosts = dc.get_hosts()
                print("           " + str(dc) + ".load_newhosts() at " + str(now) + " found " + str(
                    len(hosts)) + " hosts")

            if len(hosts) > 0:
                break
示例#6
0
    def handle(self, *args, **options):
        now = datetime.datetime.utcnow()
        print("starting check_prod_vs_int_mounts now: " + str(now))

        intcluster = Cluster.objects.filter(
            name=settings.QUMULO_intcluster['name'])
        if intcluster.count() == 0:
            intcluster = Cluster(
                name=settings.QUMULO_intcluster['name'],
                ipaddr=settings.QUMULO_intcluster['ipaddr'],
                adminpassword=settings.QUMULO_intcluster['adminpassword'],
                port=8000)
            intcluster.save()
        else:
            intcluster = intcluster[0]

        prodcluster = Cluster.objects.filter(
            name=settings.QUMULO_prodcluster['name'])
        if prodcluster.count() == 0:
            prodcluster = Cluster(
                name=settings.QUMULO_prodcluster['name'],
                ipaddr=settings.QUMULO_prodcluster['ipaddr'],
                adminpassword=settings.QUMULO_prodcluster['adminpassword'],
                port=8000)
            prodcluster.save()
        else:
            prodcluster = prodcluster[0]

        intbymount = {}
        prodbymount = {}

        cmd = "/usr/bin/showmount -e " + str(intcluster.ipaddr)
        # print(cmd)
        result = commands.getstatusoutput(cmd)
        if result[0] == 0:
            results = result[1].split("\n")
            for line in results:
                if 'Exports list' in str(line):
                    continue
                thisline = line.split()
                tmp = set()
                for i in range(1, len(thisline)):
                    tmp.add(thisline[i])
                intbymount[thisline[0]] = tmp
        else:
            print("error fetching data for cluster " + str(intcluster))

        intmounts = intbymount.keys()
        # for m in intmounts:
        #    print(str(m) + ": " + str(intbymount[m]))

        cmd = "/usr/bin/showmount -e " + str(prodcluster.ipaddr)
        # print(cmd)
        result = commands.getstatusoutput(cmd)
        if result[0] == 0:
            results = result[1].split("\n")
            for line in results:
                if 'Exports list' in str(line):
                    continue
                thisline = line.split()
                tmp = set()
                for i in range(1, len(thisline)):
                    tmp.add(thisline[i])
                prodbymount[thisline[0]] = tmp
        else:
            print("error fetching data for cluster " + str(prodcluster))

        prodmounts = prodbymount.keys()
        # for m in prodmounts:
        #    print(str(m) + ": " + str(prodbymount[m]))

        intmounts.sort()
        prodmounts.sort()
        if intmounts != prodmounts:
            print("intmounts not equal prodmounts!")
            sys.exit(-1)

        nummounts = len(prodmounts)
        print("found " + str(nummounts)) + " mountpoints"
        i = 1
        for m in prodmounts:
            prodset = prodbymount[m]
            intset = intbymount[m]
            difference = prodset.difference(intset)
            if len(difference) > 0:
                print(str(i) + " -- found difference for " + str(m))
                print("         prodset: " + str(prodset))
                print("         intset: " + str(intset))
            else:
                print(str(i) + " -- " + str(m) + " is OK")
            i = i + int(1)