def __init__(self): # TODO Fix logging self.log = logger('DEBUG', 'logs.log') self.reqheaders = { 'User-Agent': 'CiscoUCM-HttpClient/1.0', 'methodName': 'isRoleAccessAllowed', }
def start_non_responsive_tasks_watchdog(cls): log = config.logger("non_responsive_tasks_watchdog") relevant_status = (TaskStatus.in_progress,) threshold = timedelta( seconds=config.get( "services.tasks.non_responsive_tasks_watchdog.threshold_sec", 7200 ) ) watch_interval = config.get( "services.tasks.non_responsive_tasks_watchdog.watch_interval_sec", 900 ) sleep(watch_interval) while not ThreadsManager.terminating: try: ref_time = datetime.utcnow() - threshold log.info( f"Starting cleanup cycle for running tasks last updated before {ref_time}" ) tasks = list( Task.objects( status__in=relevant_status, last_update__lt=ref_time ).only("id", "name", "status", "project", "last_update") ) if tasks: log.info(f"Stopping {len(tasks)} non-responsive tasks") for task in tasks: log.info( f"Stopping {task.id} ({task.name}), last updated at {task.last_update}" ) ChangeStatusRequest( task=task, new_status=TaskStatus.stopped, status_reason="Forced stop (non-responsive)", status_message="Forced stop (non-responsive)", force=True, ).execute() log.info(f"Done") except Exception as ex: log.exception(f"Failed stopping tasks: {str(ex)}") sleep(watch_interval)
from pathlib import Path from config import config from database.model.auth import Role from service_repo.auth.fixed_user import FixedUser from .migration import _apply_migrations from .pre_populate import PrePopulate from .user import ensure_fixed_user, _ensure_auth_user, _ensure_backend_user from .util import _ensure_company, _ensure_default_queue, _ensure_uuid log = config.logger(__package__) def init_mongo_data(): try: empty_dbs = _apply_migrations(log) _ensure_uuid() company_id = _ensure_company(log) _ensure_default_queue(company_id) if empty_dbs and config.get("apiserver.mongo.pre_populate.enabled", False): zip_file = config.get("apiserver.mongo.pre_populate.zip_file") if not zip_file or not Path(zip_file).is_file(): msg = f"Failed pre-populating database: invalid zip file {zip_file}" if config.get("apiserver.mongo.pre_populate.fail_on_error", False): log.error(msg) raise ValueError(msg) else:
from mongoengine.connection import get_db from semantic_version import Version import database.utils from config import config from database import Database from database.model.auth import Role from database.model.auth import User as AuthUser, Credentials from database.model.company import Company from database.model.user import User from database.model.version import Version as DatabaseVersion from elastic.apply_mappings import apply_mappings_to_host from es_factory import get_cluster_config from service_repo.auth.fixed_user import FixedUser log = config.logger(__file__) migration_dir = (Path(__file__) / "../../migration/mongodb").resolve() class MissingElasticConfiguration(Exception): """ Exception when cluster configuration is not found in config files """ pass def init_es_data(): hosts_config = get_cluster_config("events").get("hosts") if not hosts_config:
) from apimodels.users import CreateRequest as Users_CreateRequest from bll.user import UserBLL from config import config from database.errors import translate_errors_context from database.model.auth import User, Role, Credentials from database.model.company import Company from service_repo import APICall from service_repo.auth import ( Identity, Token, get_client_id, get_secret_key, ) log = config.logger("AuthBLL") class AuthBLL: @staticmethod def get_token_for_user( user_id: str, company_id: str = None, expiration_sec: int = None, entities: dict = None, ) -> GetTokenResponse: with translate_errors_context(): query = dict(id=user_id) if company_id:
from os import getenv from boltons.iterutils import first from furl import furl from jsonmodels import models from jsonmodels.errors import ValidationError from jsonmodels.fields import StringField from mongoengine import register_connection from mongoengine.connection import get_connection from config import config from .defs import Database from .utils import get_items log = config.logger("database") strict = config.get("apiserver.mongo.strict", True) OVERRIDE_HOST_ENV_KEY = ( "TRAINS_MONGODB_SERVICE_HOST", "MONGODB_SERVICE_HOST", "MONGODB_SERVICE_SERVICE_HOST", ) OVERRIDE_PORT_ENV_KEY = ("TRAINS_MONGODB_SERVICE_PORT", "MONGODB_SERVICE_PORT") _entries = [] class DatabaseEntry(models.Base): host = StringField(required=True) alias = StringField()
import os from threading import Thread from time import sleep from typing import Optional import attr import requests from semantic_version import Version from config import config from version import __version__ as current_version log = config.logger(__name__) class CheckUpdatesThread(Thread): _enabled = bool(config.get("apiserver.check_for_updates.enabled", True)) @attr.s(auto_attribs=True) class _VersionResponse: version: str patch_upgrade: bool description: str = None def __init__(self): super(CheckUpdatesThread, self).__init__(target=self._check_updates, daemon=True) def start(self) -> None: if not self._enabled: log.info("Checking for updates is disabled")
from six import string_types from apierrors import errors from config import config from database.errors import MakeGetAllQueryError from database.projection import project_dict, ProjectionHelper from database.props import PropsMixin from database.query import RegexQ, RegexWrapper from database.utils import ( get_company_or_none_constraint, get_fields_with_attr, field_exists, field_does_not_exist, ) log = config.logger("dbmodel") ACCESS_REGEX = re.compile(r"^(?P<prefix>>=|>|<=|<)?(?P<value>.*)$") ACCESS_MODIFIER = {">=": "gte", ">": "gt", "<=": "lte", "<": "lt"} ABSTRACT_FLAG = {"abstract": True} class AuthDocument(Document): meta = ABSTRACT_FLAG class ProperDictMixin(object): def to_proper_dict(self, strip_private=True, only=None,