Ejemplo n.º 1
0
from temboardagent.errors import UserError
from temboardagent.routing import RouteSet

from . import functions as activity_functions


routes = RouteSet()


@routes.get(b'/activity', check_key=True)
def get_activity(http_context, app):
    with app.postgres.connect() as conn:
        return activity_functions.get_activity(conn)


@routes.get(b'/activity/waiting', check_key=True)
def get_activity_waiting(http_context, app):
    with app.postgres.connect() as conn:
        return activity_functions.get_activity_waiting(conn)


@routes.get(b'/activity/blocking', check_key=True)
def get_activity_blocking(http_context, app):
    with app.postgres.connect() as conn:
        return activity_functions.get_activity_blocking(conn)


@routes.post(b'/activity/kill')
def post_activity_kill(http_context, app):
    with app.postgres.connect() as conn:
        return activity_functions.post_activity_kill(conn, app.config,
Ejemplo n.º 2
0
from datetime import datetime

from temboardagent.routing import RouteSet
from temboardagent.toolkit import taskmanager
from temboardagent.tools import validate_parameters
from temboardagent.types import T_OBJECTNAME

from . import functions


routes = RouteSet(prefix=b'/maintenance')
workers = taskmanager.WorkerSet()


@routes.get(b'', check_key=True)
def get_instance(http_context, app):
    with app.postgres.connect() as conn:
        instance = next(functions.get_instance(conn))

    with app.postgres.connect() as conn:
        rows = functions.get_databases(conn)

    databases = []
    for database in rows:
        database = dict(database)
        # we need to connect with a different database
        dbname = database['datname']
        with functions.get_postgres(app.config, dbname).connect() as conn:
            database.update(**functions.get_database(conn))
        databases.append(database)
Ejemplo n.º 3
0
from temboardagent.routing import RouteSet

from . import functions as pgconf_functions
from .types import (
    T_PGSETTINGS_CATEGORY,
)


routes = RouteSet(prefix=b'/pgconf')


@routes.get(b'/configuration')
@routes.get(b'/configuration/category/' + T_PGSETTINGS_CATEGORY)
def get_pg_conf(http_context, app):
    with app.postgres.connect() as conn:
        return pgconf_functions.get_settings(conn, http_context)


@routes.get(b'/configuration/categories')
def get_pg_conf_categories(http_context, app):
    with app.postgres.connect() as conn:
        return pgconf_functions.get_settings_categories(conn)


@routes.post(b'/configuration')
def post_pg_conf(http_context, app):
    with app.postgres.connect() as conn:
        return pgconf_functions.post_settings(conn, app.config, http_context)


@routes.get(b'/configuration/status')
Ejemplo n.º 4
0
#
workers = WorkerSet()


@workers.register(pool_size=1)
@workers.schedule(id='monprojet_toto', redo_interval=5)
def worker_toto(app):
    logger.info("hello")


#
# API Version 0
# This API is a Work In Process and highly unstable !
#

routes_v0 = RouteSet()


# GET  /pgbadger/v0/reports  : list all reports
@routes_v0.get(b'/pgbadger/v0/reports')
def get_pgbadger_reports(http_context, app):
    try:
        return json.dumps(pgbadger.list_reports(app.config))
    except UserError as e:
        return json.dumps(error())


# GET  /pgbadger/v0/reports/last  : get last report (in json)
@routes_v0.get(b'/pgbadger/v0/reports/last')
def get_pgbadger_report_last(http_context, app):
    try:
Ejemplo n.º 5
0
import logging
import json
import os

from temboardagent.toolkit import taskmanager
from temboardagent.toolkit.configuration import OptionSpec
from temboardagent.routing import RouteSet
from temboardagent.queue import Queue, Message
from temboardagent.errors import UserError

from . import metrics

logger = logging.getLogger(__name__)
routes = RouteSet(prefix=b'/dashboard')
workers = taskmanager.WorkerSet()


@routes.get(b'')
def dashboard(http_context, app):
    return metrics.get_metrics_queue(app.config)


@routes.get(b'/config')
def dashboard_config(http_context, app):
    return dict(
        scheduler_interval=app.config.dashboard.scheduler_interval,
        history_length=app.config.dashboard.history_length,
    )


@routes.get(b'/live')
Ejemplo n.º 6
0
import logging

from temboardagent.errors import HTTPError
from temboardagent.routing import RouteSet
from temboardagent.postgres import Postgres
from temboardagent.tools import now
from temboardagent.toolkit.configuration import OptionSpec

logger = logging.getLogger(__name__)
routes = RouteSet(prefix=b"/statements")

query = """\
SELECT
  rolname,
  datname,
  pgss.*
FROM pg_stat_statements pgss
JOIN pg_authid ON pgss.userid = pg_authid.oid
JOIN pg_database ON pgss.dbid = pg_database.oid
"""


@routes.get(b"/", check_key=True)
def get_statements(http_context, app):
    """Return a snapshot of latest statistics of executed SQL statements
    """
    config = app.config
    dbname = config.statements.dbname
    snapshot_datetime = now()
    conninfo = dict(config.postgresql, dbname=dbname)
    try:
Ejemplo n.º 7
0
    probe_memory,
    probe_process,
    probe_replication_lag,
    probe_replication_connection,
    probe_sessions,
    probe_temp_files_size_delta,
    probe_tblspc_size,
    probe_wal_files,
    probe_xacts,
    run_probes,
)
from .output import remove_passwords

logger = logging.getLogger(__name__)
workers = taskmanager.WorkerSet()
routes = RouteSet(prefix=b'/monitoring')

T_TIMESTAMP_UTC = b'(^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$)'
T_LIMIT = b'(^[0-9]+$)'


@routes.get(b'/probe/sessions', check_key=True)
def get_probe_sessions(http_context, app):
    return api_run_probe(probe_sessions(app.config.monitoring), app.config)


@routes.get(b'/probe/xacts', check_key=True)
def get_probe_xacts(http_context, app):
    return api_run_probe(probe_xacts(app.config.monitoring), app.config)

Ejemplo n.º 8
0
    probe_loadavg,
    probe_locks,
    probe_memory,
    probe_process,
    probe_replication,
    probe_sessions,
    probe_tblspc_size,
    probe_wal_files,
    probe_xacts,
    run_probes,
)
from .output import send_output, remove_passwords

logger = logging.getLogger(__name__)
workers = taskmanager.WorkerSet()
routes = RouteSet(prefix=b'/monitoring/probe')


@routes.get(b'/sessions')
def get_probe_sessions(http_context, app):
    return api_run_probe(probe_sessions(app.config.monitoring), app.config)


@routes.get(b'/xacts')
def get_probe_xacts(http_context, app):
    return api_run_probe(probe_xacts(app.config.monitoring), app.config)


@routes.get(b'/locks')
def get_probe_locks(http_context, app):
    return api_run_probe(probe_locks(app.config.monitoring), app.config)
Ejemplo n.º 9
0
from temboardagent.routing import RouteSet
from temboardagent.toolkit.configuration import OptionSpec
from temboardagent.toolkit.validators import file_
import datetime
import os.path
from pickle import loads as unpickle
from temboardagent.errors import HTTPError
from temboardagent.toolkit import taskmanager

from . import functions

import pgbackrest
import pitrery

logger = logging.getLogger('backup')
routes = RouteSet(prefix=b'/backup')

__version__ = '1.0'

T_OPERATION_ID = b'(^[0-9a-f]{8}$)'


class _BackupTool(object):
    def __new__(self, tool):
        if tool == 'pitrery':
            return pitrery
        return pgbackrest


@routes.get(b'', check_session=False)
def get_plugin_info(http_context, app):