def handler(metrics_handler, params):
    targets = params.get('target', None)
    if targets is None or len(targets) < 1:
        raise RuntimeError(f'invalid or missing target: {targets}')

    registry = CollectorRegistry()

    timer = Gauge('probe_duration_seconds', 'Duration of NFS probing',
                  registry=registry)

    success = True
    with timer.time():
        for target in targets:
            host, path = target.split(':')
            target = f'nfs://{host}{path}?version=4'
            result = subprocess.run(["nfs-ls", target], stdout=subprocess.PIPE)

            if result.returncode != 0:
                success = False
                break

    success_gauge = Gauge('probe_success', 'Success of NFS probing',
                          registry=registry)

    success_gauge.set(success)
    return registry
示例#2
0
def extract_image(image_name: str, timeout: int = None, *, registry_credentials: str = None,
                  tls_verify: bool=True) -> dict:
    """Extract dependencies from an image."""
    #Start prometheus
    prometheus_registry = CollectorRegistry()
    metric_analyzer_job = Gauge('package_extract_time','Runtime of package extract job', registry=prometheus_registry)
    #Begin the timer for when the job starts
    with metric_analyzer_job.time():
        image_name = quote(image_name)
        with tempfile.TemporaryDirectory() as dir_path:
            download_image(
                image_name,
                dir_path,
                timeout=timeout or None,
                registry_credentials=registry_credentials or None,
                tls_verify=tls_verify
            )
        rootfs_path = os.path.join(dir_path, 'rootfs')
        layers = construct_rootfs(dir_path, rootfs_path)

        result = run_analyzers(rootfs_path)
        result['layers'] = layers
    push_gateway = os.getenv('PROMETHEUS_PUSH_GATEWAY', 'pushgateway:9091')
    if push_gateway:
        try:
            pushadd_to_gateway(push_gateway, job='package-extract-runtime',registry=prometheus_registry)
        except Exception as e:
            _LOGGER.exception('An error occurred pushing the metrics: {}'.format(str(e)))
    return result
示例#3
0
        def wrapper_log_to_prometheus(*args, **kwargs):
            result = None
            if not settings.PUSHGATEWAY_HOST:
                result = job_func(*args, **kwargs)
            else:
                registry = CollectorRegistry()
                duration = Gauge(
                    f"os2bos_{job_name}_duration_seconds",
                    f"Duration of {job_name}",
                    registry=registry,
                )

                try:
                    with duration.time():
                        result = job_func(*args, **kwargs)
                except Exception:
                    pass
                else:
                    # only runs when there are no exceptions
                    last_success = Gauge(
                        f"os2bos_{job_name}_last_success",
                        f"Unixtime {job_name} last succeeded",
                        registry=registry,
                    )
                    last_success.set_to_current_time()
                finally:
                    pushadd_to_gateway(
                        settings.PUSHGATEWAY_HOST,
                        job=f"{job_name}",
                        registry=registry,
                    )
            return result
示例#4
0
class TestGauge(unittest.TestCase):
    def setUp(self):
        self.registry = CollectorRegistry()
        self.gauge = Gauge('g', 'help', registry=self.registry)

    def test_gauge(self):
        self.assertEqual(0, self.registry.get_sample_value('g'))
        self.gauge.inc()
        self.assertEqual(1, self.registry.get_sample_value('g'))
        self.gauge.dec(3)
        self.assertEqual(-2, self.registry.get_sample_value('g'))
        self.gauge.set(9)
        self.assertEqual(9, self.registry.get_sample_value('g'))

    def test_function_decorator(self):
        self.assertEqual(0, self.registry.get_sample_value('g'))

        @self.gauge.track_inprogress()
        def f():
            self.assertEqual(1, self.registry.get_sample_value('g'))

        f()
        self.assertEqual(0, self.registry.get_sample_value('g'))

    def test_block_decorator(self):
        self.assertEqual(0, self.registry.get_sample_value('g'))
        with self.gauge.track_inprogress():
            self.assertEqual(1, self.registry.get_sample_value('g'))
        self.assertEqual(0, self.registry.get_sample_value('g'))

    def test_gauge_function(self):
        x = {}
        self.gauge.set_function(lambda: len(x))
        self.assertEqual(0, self.registry.get_sample_value('g'))
        self.gauge.inc()
        self.assertEqual(0, self.registry.get_sample_value('g'))
        x['a'] = None
        self.assertEqual(1, self.registry.get_sample_value('g'))

    def test_function_decorator(self):
        self.assertEqual(0, self.registry.get_sample_value('g'))

        @self.gauge.time()
        def f():
            time.sleep(.001)

        f()
        self.assertNotEqual(0, self.registry.get_sample_value('g'))

    def test_block_decorator(self):
        self.assertEqual(0, self.registry.get_sample_value('g'))
        with self.gauge.time():
            time.sleep(.001)
        self.assertNotEqual(0, self.registry.get_sample_value('g'))
示例#5
0
class TestGauge(unittest.TestCase):
    def setUp(self):
        self.registry = CollectorRegistry()
        self.gauge = Gauge('g', 'help', registry=self.registry)

    def test_gauge(self):
        self.assertEqual(0, self.registry.get_sample_value('g'))
        self.gauge.inc()
        self.assertEqual(1, self.registry.get_sample_value('g'))
        self.gauge.dec(3)
        self.assertEqual(-2, self.registry.get_sample_value('g'))
        self.gauge.set(9)
        self.assertEqual(9, self.registry.get_sample_value('g'))

    def test_function_decorator(self):
        self.assertEqual(0, self.registry.get_sample_value('g'))

        @self.gauge.track_inprogress()
        def f():
            self.assertEqual(1, self.registry.get_sample_value('g'))

        f()
        self.assertEqual(0, self.registry.get_sample_value('g'))

    def test_block_decorator(self):
        self.assertEqual(0, self.registry.get_sample_value('g'))
        with self.gauge.track_inprogress():
            self.assertEqual(1, self.registry.get_sample_value('g'))
        self.assertEqual(0, self.registry.get_sample_value('g'))

    def test_gauge_function(self):
        x = {}
        self.gauge.set_function(lambda: len(x))
        self.assertEqual(0, self.registry.get_sample_value('g'))
        self.gauge.inc()
        self.assertEqual(0, self.registry.get_sample_value('g'))
        x['a'] = None
        self.assertEqual(1, self.registry.get_sample_value('g'))

    def test_function_decorator(self):
        self.assertEqual(0, self.registry.get_sample_value('g'))

        @self.gauge.time()
        def f():
            time.sleep(.001)

        f()
        self.assertNotEqual(0, self.registry.get_sample_value('g'))

    def test_block_decorator(self):
        self.assertEqual(0, self.registry.get_sample_value('g'))
        with self.gauge.time():
            time.sleep(.001)
        self.assertNotEqual(0, self.registry.get_sample_value('g'))
示例#6
0
def extract_image(
    image_name: str,
    timeout: int = None,
    *,
    registry_credentials: str = None,
    tls_verify: bool = True,
) -> dict:
    """Extract dependencies from an image."""
    # Setting up the prometheus registry and the Gauge metric
    prometheus_registry = CollectorRegistry()
    metric_analyzer_job = Gauge(
        "package_extract_time",
        "Runtime of package extract job",
        registry=prometheus_registry,
    )

    # Begins a timer to record the running time of the job
    with metric_analyzer_job.time(), tempfile.TemporaryDirectory() as dir_path:
        image_name = quote(image_name)
        download_image(
            image_name,
            dir_path,
            timeout=timeout or None,
            registry_credentials=registry_credentials or None,
            tls_verify=tls_verify,
        )
        image_size = get_image_size(dir_path)
        rootfs_path = os.path.join(dir_path, "rootfs")
        layers = construct_rootfs(dir_path, rootfs_path)

        result = run_analyzers(rootfs_path)
        result["layers"] = layers
        result["image_size"] = image_size

    _push_gateway_host = os.getenv("PROMETHEUS_PUSHGATEWAY_HOST")
    _push_gateway_port = os.getenv("PROMETHEUS_PUSHGATEWAY_PORT")
    if _push_gateway_host and _push_gateway_port:
        try:
            push_gateway = f"{_push_gateway_host:_push_gateway_port}"
            _LOGGER.debug(
                f"Submitting metrics to Prometheus push gateway {push_gateway}"
            )
            pushadd_to_gateway(
                push_gateway,
                job="package-extract-runtime",
                registry=prometheus_registry,
            )
        except Exception as e:
            _LOGGER.exception(
                "An error occurred pushing the metrics: {}".format(str(e))
            )

    return result
    def main(self):
        """ 
        Execute SBR OpenStack bot.
        """
        job_name = self.job + '-job-exec-time'
        job_name = job_name.replace('-', '_')
        job_metric_time = Gauge(job_name, 'Runtime of application job execution', registry=prometheus_registry)
        try:
            with job_metric_time.time():
                solutions = list()
                complete = False
                remote_host, remote_port, remote_dir = self.get_ticket_config()
                if remote_host and remote_port and remote_dir:
                    self.ssh_copy_attachments(remote_host, remote_port, remote_dir)
                    if os.path.isdir(self.path):
                        sosreports = self.get_all_sosreports()
                        print("List of extracted sosreports: ", sosreports)
                        for sosreport in sosreports:
                            execution_path = f"{self.path}/{sosreport}"
                            self.execute_citellus(execution_path)
                            solution_data = self.get_solutions(execution_path)
                            solutions.append(solution_data)
                            comment, link = self.generate_comments(solution_data)
                            print("Comment:", comment)
                            complete = True
                            if comment:
                                complete = self.publish_comments(comment, link)

                if complete:
                    print('Script successfully completed')
                else:
                    metric_name = self.job + '-application-failed'
                    metric_name = metric_name.replace('-', '_')
                    job_comment_metric = Gauge(metric_name, 'Script Unable to process the ticket',
                                               registry=prometheus_registry)
                    job_comment_metric.inc()
                    _LOGGER.info('Script Unable to process the ticket')
                    print('Script Failed!')
        except Exception as e:
            print("Script Failed!")
            traceback.print_exc()
        self.pushgateway(self.job)
def read_temperature(reader: DS18B20TemperatureReader, duration_gauge: Gauge):
    with duration_gauge.time():
        return reader.read_temperature_celsius()
import time
import random
from prometheus_client import Gauge, CollectorRegistry, pushadd_to_gateway

registry = CollectorRegistry()
duration = Gauge(
    'mybatchjob_duration_seconds',
    'Duration of batch job',
    registry=registry
)

try:
    with duration.time():
        print("调度任务就愉快的开始了!")
        time.sleep(random.randint(1, 10))
        #time.sleep(100)
        print("这里跑了我们的调度任务")
except:
    pass
else:
    last_success = Gauge(
        'mybatchjob_last_success',
        'Unixtime my batch job last succeeded',
        registry=registry
    )
    last_success.set_to_current_time()
finally:
    pushadd_to_gateway('10.8.8.61:9091', job='my_batch_job', registry=registry)