Esempio n. 1
0
 def ecs_info(self) -> GaugeMetricFamily:
     req = DescribeECS.DescribeInstancesRequest()
     nested_handler = {
         'InnerIpAddress': lambda obj: try_or_else(lambda: obj['IpAddress'][0], ''),
         'PublicIpAddress': lambda obj: try_or_else(lambda: obj['IpAddress'][0], ''),
         'VpcAttributes': lambda obj: try_or_else(lambda: obj['PrivateIpAddress']['IpAddress'][0], ''),
     }
     return self.info_template(req, 'aliyun_meta_ecs_info', nested_handler=nested_handler)
Esempio n. 2
0
 def label_values(self, instance, label_keys, nested_handler=None):
     if nested_handler is None:
         nested_handler = {}
     return map(
         lambda k: str(nested_handler[k](instance[k]))
         if k in nested_handler else try_or_else(lambda: str(instance[k]),
                                                 ''), label_keys)
Esempio n. 3
0
    def metric_generator(self, project, metric):
        if 'name' not in metric:
            raise Exception('name must be set in metric item.')
        name = metric['name']
        metric_name = metric['name']
        period = 60
        measure = 'Average'
        if 'rename' in metric:
            name = metric['rename']
        if 'period' in metric:
            period = metric['period']
        if 'measure' in metric:
            measure = metric['measure']

        try:
            points = self.query_metric(project, metric_name, period)
        except Exception as e:
            logging.error('Error query metrics for {}_{}'.format(project, metric_name), exc_info=e)
            yield metric_up_gauge(self.format_metric_name(project, name), False)
            return
        if len(points) < 1:
            yield metric_up_gauge(self.format_metric_name(project, name), False)
            return
        label_keys = self.parse_label_keys(points[0])
        gauge = GaugeMetricFamily(self.format_metric_name(project, name), '', labels=label_keys)
        for point in points:
            gauge.add_metric([try_or_else(lambda: str(point[k]), '') for k in label_keys], point[measure])
        yield gauge
        yield metric_up_gauge(self.format_metric_name(project, name), True)
Esempio n. 4
0
 def cdn_info(self) -> GaugeMetricFamily:
     req = DescribeCDN.DescribeUserDomainsRequest()
     req.set_DomainStatus('online')
     nested_handler = {
         'DomainName':
         lambda obj: try_or_else(lambda: obj['DomainName'], ''),
     }
     return self.info_template(
         req,
         'aliyun_meta_cdn_info',
         to_list=lambda data: data['Domains']['PageData'])