import logging import os from django.template.loader import render_to_string from events.constants import ELK_URL, ELK_LOGIN, ELK_PASS from inputs.constants import LOGSTASH_CONFIG_DIR from inputs.enums import LogInputType from inputs.models import LogInputArmaIF, LogInputEndpoint _log = logging.getLogger(__name__) def update_arma_config(arma: LogInputArmaIF): input = arma.input if input.type != LogInputType.ARMAIF: _log.error(f'Call update_arma_config with input type {input.type}') return if not input.config_file_name: input.config_file_name = get_config_name(input) input.save() context = { "pk": input.pk, "port": arma.port, "elastic_url": ELK_URL, "elastic_login": ELK_LOGIN, "elastic_pass": ELK_PASS, "adjust_datetime": input.adjust_datetime, } config = render_to_string("vector/config/armaif.toml", context) update_config(input, config) def update_endpoint_config(endpoint: LogInputEndpoint): input = endpoint.input if input.type != LogInputType.ENDPOINT: _log.error(f'Call update_endpoint_config with input type {input.type}') return if not input.config_file_name: input.config_file_name = get_config_name(input) input.save() context = { "pk": input.pk, "port": endpoint.port, "elastic_url": ELK_URL, "elastic_login": ELK_LOGIN, "elastic_pass": ELK_PASS, "adjust_datetime": input.adjust_datetime, } config = render_to_string( 'vector/config/endpoint.toml', context) update_config(input, config) def update_config(input, config_content: str): """ Write new config content to correct file""" with open(os.path.join(LOGSTASH_CONFIG_DIR, input.config_file_name), 'w') as f: # with open(os.path.join('/usr/src/app/public/vector', input.config_file_name), 'w') as f: f.write(config_content) def get_config_name(log_input) -> str: if log_input.type == LogInputType.ARMAIF: return f'armaif_{log_input.pk}.toml' elif log_input.type == LogInputType.ENDPOINT: return f'endpoint_{log_input.pk}.toml' else: raise RuntimeError(f"Can't made config name for type {log_input.type}")