Exemplo n.º 1
0
    def exec(self, dir_path):
        """
        Exec merge files and sort by timestamp.
        :param str dir_path: Directory path which contains log files.
        :return: Merge result.
        :rtype bool
        """
        dir_path = dir_path.rstrip('/')
        log.i("- start merge: [%s]" % dir_path)

        lines = [self.Parsed(dt.min, b'')]
        files = list(self.__files(dir_path))
        if len(files) == 0:
            return False

        for l in list(fileinput.input(files, mode="rb")):
            p = self.__parse(l)
            if p.time is None:
                lines[-1].line = lines[-1].line + p.line
                continue
            lines.append(p)

        log.i("- write merged file: [%s%s]" % (dir_path, Merge.FILE_SUFFIX))
        lines = sorted(lines, key=lambda x: x.time)
        with open(dir_path + Merge.FILE_SUFFIX, "wb") as fd:
            for l in lines:
                fd.write(l.line)

        return True
Exemplo n.º 2
0
 def test_set_level(self):
     out = io.StringIO()
     log.logger.addHandler(StreamHandler(stream=out))
     log.set_level(log.Level.WARN)
     log.i("message")
     self.assertEqual(out.getvalue(), "")
     log.set_level(log.Level.INFO)
     log.i("message")
     self.assertEqual(out.getvalue(), "message\n")
Exemplo n.º 3
0
 def __exec_convert(self, script_path):
     """
     Execute conversion using `sed` command.
     :param str script_path: Script file path, which is used by `sed` command.
     """
     # execute conversion
     f = os.path.splitext(self.__p.file)
     dp = f[0] + Converter.DIR_SUFFIX + f[1]
     log.i("- convert: %s" % dp)
     self.__call(Converter.SED_CMD_FMT % (script_path, self.__p.file, dp))
Exemplo n.º 4
0
def attach_bots_from_manager():
    tokens = manager.get_tokens()
    if not tokens:
        log.i("Not bots found on database, adding default bot")
        maker_token = config["defaults"]["maker"]["token"]
        owner_id = config["defaults"]["owner"]["id"]
        if not maker_token or not owner_id:
            raise ConfigurationError("No bots on database and configuration file has no default token nor owner id")
        if not mongo_interface.register_bot(maker_token, owner_id):
            log.e("Could not even register default bot, interrupting execution abruptly")
            exit(1)
    attach_bots(manager.get_tokens())
Exemplo n.º 5
0
def file(dirname, filename, timeout):
    """
    Wait until a file created.
    :param str dirname: Directory path to be watched.
    :param str filename: File name to be watched.
    :param num timeout: How many seconds to be wait. [sec]
    :return: Is created the file.
    :rtype bool
    """
    is_glob = filename.find('*') >= 0
    handler = ChangeHandler(dirname, filename, is_glob)
    observer = Observer()
    observer.schedule(handler, dirname, recursive=False)
    observer.start()

    try:
        UPDATE_INTERVAL = 0.5
        interval = UPDATE_INTERVAL
        while interval >= 0 and timeout > 0:
            time.sleep(0.1)
            timeout -= 0.1
            interval -= 0.1
            log.d('- time out remain %.2f, update interval %.2f' %
                  (timeout, interval))
            if handler.modified is True:
                log.i('- now writing... %s ' % filename)
                handler.modified = False
                interval = UPDATE_INTERVAL

    except KeyboardInterrupt:
        observer.stop()

    if not is_glob:
        is_exists = os.path.exists(os.path.join(dirname, filename))
        if is_exists:
            if timeout <= 0:
                log.w("- The file still updating.")
        else:
            log.i("- time out")
            return False

    observer.stop()
    observer.join(timeout)

    return True
Exemplo n.º 6
0
def _elab_module_fun(function, instance, Module):
    if not hasattr(instance, function.name):
        if not function.optional:
            log.w(f"{Module.__name__} has no function {function.name}")
        return function.optional

    real_function = getattr(instance, function.name)
    if not callable(real_function):
        if not function.optional:
            log.w(f"{Module.__name__}.{function.name} is not a function")
        return function.optional

    if function.name == "on_new_trigger":
        variables.on_new_trigger_functions.append(real_function)
        log.i("Registered callback")
        return True
    if function.name == "on_trigger_change":
        variables.on_trigger_change_functions.append(real_function)
        log.i("Registered callback")
        return True

    return_value = real_function()
    if type(return_value) is not function.type:
        log.w(f"{Module.__name__}.{function.name} returns '{type(return_value).__name__}',"
              f" '{type(function.type).__name__}' is required")
        return False

    log_string = function.elaborate_data(return_value)
    log.i(f"Module: {log_string}")
    return True
Exemplo n.º 7
0
def detach_bot(token: str):
    log.i(f"Detaching bot {token}")
    for bot in variables.attached_bots:
        log.d(bot.token)
        if bot.token != str(token):
            continue
        variables.attached_bots.remove(bot)
        log.i(f"Bot {token} detached")
        return bot.stop()
    log.i(f"Bot {token} not found")
Exemplo n.º 8
0
 def test_color(self):
     log.d("debug")
     log.i("info")
     log.w("warn")
     log.e("error")
Exemplo n.º 9
0
    def test_i(self):
        out = io.StringIO()
        log.logger.addHandler(StreamHandler(stream=out))

        log.i("message")
        self.assertEqual(out.getvalue(), "message\n")
Exemplo n.º 10
0
from pymongo.collection import Collection

from entities.dialog import Dialog
from entities.group import Group
from entities.stats import Stats
from entities.user import User
from entities.trigger import Trigger
from exceptions.telegram_exception import TelegramException
from exceptions.unregistered_bot import UnregisteredBot
from logger import log

from ktelegram import methods

from configuration.config import config

log.i("Getting data from configuration file...")
_password = config["mongo"]["password"]
_username = config["mongo"]["username"]
_ip = config["mongo"]["ip"]
_db_name = config["mongo"]["db-name"]

_mongo_uri = f"mongodb://{_username}:{_password}@{_ip}/{_db_name}?retryWrites=true"

_client = None
_singleton_lock = Lock()

_default_language = config["defaults"]["language"]
log.d("Default language: " + _default_language)


# region MongoCore
Exemplo n.º 11
0
def attach_bot(bot):
    variables.attached_bots.append(bot)
    log.i(f"Running bot {bot.bot_id}")
    run_bot(bot)
Exemplo n.º 12
0
def stop():
    log.i("Stopping bots")
    [bot.stop() for bot in variables.attached_bots]
    log.i("Stopping mongo ")
    mongo_interface.stop()
    variables.running = False
Exemplo n.º 13
0
def _init(bot):
    if bot.clean_start:
        methods.clean_updates(bot)
    log.i(f"Bot @{bot.username} ok")
Exemplo n.º 14
0
def run(threaded: bool = True, idle: bool = True, auto_attach: bool = True):

    log.i(f"Starting Kitsu Ultimate version {config['lotus']['version']}")

    _load_modules()

    if config["startup"]["drop"]["dialogs"]:
        log.i("Dropping dialogs")
        mongo_interface.drop_dialogs()

    if config["startup"]["drop"]["triggers"]:
        log.i("Dropping triggers")
        mongo_interface.drop_triggers()

    if config["startup"]["drop"]["bots"]:
        log.i("Dropping bots")
        mongo_interface.drop_bots()

    if config["startup"]["drop"]["groups"]:
        log.i("Dropping groups")
        mongo_interface.drop_groups()

    if config["startup"]["drop"]["users"]:
        log.i("Dropping users")
        mongo_interface.drop_users()

    if not threaded:
        log.i("Running in webhook mode")
        raise NotImplementedError()

    if auto_attach:
        log.d("Auto attaching bots from mongo")
        attach_bots_from_manager()

    log.i("Running attached bots")
    [lotus_interface.run_bot(bot) for bot in variables.attached_bots]

    variables.running = True
    if idle:
        lotus_interface.idle()