Exemple #1
0
    def test_8_livestate(self):
        print ""
        print "get livestate"

        # Force authentication ...
        connection = frontend.login("admin", "admin", force=True)
        assert_true(frontend.authenticated)
        assert_true(frontend.token)

        connection = frontend.connect(username="******")
        assert_true(frontend.authenticated)
        assert_true(frontend.connected)

        print "get livetstate elements"
        items = frontend.get_livestate(parameters=None)
        print "Got %d elements" % (len(items))
        print items

        print "get livetstate registered elements"
        parameters = {"where": '{"register":true}'}
        items = frontend.get_livestate(parameters=parameters)
        print "Got %d elements" % (len(items))
        print items

        print "get livetstate hosts"
        items = frontend.get_livestate_hosts(parameters=None)
        print "Got %d elements" % (len(items))
        print items[0]

        print "get livetstate registered hosts"
        parameters = {"where": '{"register":true}'}
        items = frontend.get_livestate_hosts(parameters=parameters)
        print "Got %d elements" % (len(items))
        print items[0]

        print "get livetstate services"
        parameters = {"where": '{"register":true}'}
        items = frontend.get_livestate_services(parameters=parameters)
        print "Got %d elements" % (len(items))
        print items[0]

        print "get livetstate registered services"
        items = frontend.get_livestate_services(parameters=None)
        print "Got %d elements" % (len(items))
        print items[0]

        # Backend connection
        frontend.disconnect()
Exemple #2
0
    def get_livestate(self, parameters=None):
        """
        Get live state from backend

        Live state is a list of items with those fields:
        {
            "host_name": "56080340f9e3858df8c5f5d1",
            "service_description": "56080344f9e3858df8c5f6cf",
            "next_check": 0,
            "last_state": "CRITICAL",
            "last_state_type": "HARD",
            "state": "CRITICAL",
            "max_attempts": 0,
            "last_state_changed": 0,
            "last_check": 1444545805,
            "state_type": "HARD",
            "state_id": 0,
            "current_attempt": 0,
            "acknowledged": false,
            "downtime": false,
            "output": "cd: /root/scenarii/websites: No such file or directory",
            "long_output": "",
            "perf_data": ""
            "_id": "5618fec8f9e385de8c228738",
            "_links": {
                "_created": "Sat, 10 Oct 2015 12:04:24 GMT",
                "self": {
                    "href": "livestate/5618fec8f9e385de8c228738",
                    "title": "Livestate"
                }
            },
            "_updated": "Sun, 11 Oct 2015 06:43:26 GMT",
            "_etag": "2512e62ae06f381dca390277a4915fb5c0adaaf4",
        },

        host_name and service_description fields are embedded. Those fields are dictionaries of
        fields describing an host and a service.

        :param parameters: search parameters for the backend
        :type parameters: dict

        :return: list of livestate elements
        :rtype: list
        """
        if self.livestate_age and (int(time.time()) - self.livestate_age) <= 60:
            # logger.debug(
                # "get_livestate, get livestate from backend, parameters: %s / %s",
                # parameters,
                # self.livestate_parameters
            # )
            # if not cmp(self.livestate_parameters, parameters):
            logger.debug(
                "get_livestate, return self stored livestate, helper: %s, %d elements",
                self, len(self.livestate)
            )
            return self.livestate

        logger.debug("get_livestate, get livestate from backend, parameters: %s", parameters)

        if not parameters:
            parameters = {}

        # self.livestate_parameters = parameters

        if "embedded" not in parameters:
            parameters.update({"embedded": '{"host_name": 1, "service_description": 1}'})
        if "sort" not in parameters:
            parameters.update({"sort": 'state_id'})

        self.livestate = frontend.get_livestate(parameters=parameters)
        hosts_ids = {}
        # Searching for hosts first ...
        for item in self.livestate:
            if not item['service_description']:
                item['type'] = 'host'
                item['id'] = item['host_name']['host_name']
                item['bi'] = item['host_name']['business_impact']
                item['name'] = item['host_name']['host_name']
                item['friendly_name'] = ""
                if 'alias' in item['host_name']:
                    if item['host_name']['alias']:
                        item['friendly_name'] = item['host_name']['alias']
                if 'display_name' in item['host_name']:
                    if item['host_name']['display_name']:
                        item['friendly_name'] = item['host_name']['display_name']

                # Build an hosts cache ...
                if not item['host_name']['_id'] in hosts_ids:
                    hosts_ids[item['host_name']['_id']] = item['host_name']['host_name']

        # Searching for services next ...
        for item in self.livestate:
            if item['service_description']:
                item['type'] = 'service'
                item['id'] = item['service_description']['service_description']
                item['bi'] = item['service_description']['business_impact']
                item['name'] = "%s/%s" % (
                    hosts_ids[item['service_description']['host_name']],
                    item['service_description']['service_description']
                )
                item['friendly_name'] = ""
                if 'alias' in item['service_description']:
                    if item['service_description']['alias']:
                        item['friendly_name'] = item['service_description']['alias']
                if 'display_name' in item['service_description']:
                    if item['service_description']['display_name']:
                        item['friendly_name'] = item['service_description']['display_name']

        self.livestate_age = int(time.time())
        return self.livestate