From e43e9f12392620cdc2dea2f5e70366f6e1a8f6e2 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Mon, 18 Jan 2021 10:50:56 +0100 Subject: [PATCH 01/49] minor changes --- pandora_console/include/functions_agents.php | 2 +- pandora_console/include/functions_api.php | 109 ------------------- 2 files changed, 1 insertion(+), 110 deletions(-) diff --git a/pandora_console/include/functions_agents.php b/pandora_console/include/functions_agents.php index 8be043fb98..866dbfe519 100644 --- a/pandora_console/include/functions_agents.php +++ b/pandora_console/include/functions_agents.php @@ -147,7 +147,7 @@ function agents_locate_agent(string $field) * * @param string $alias Agent alias. * - * @return integer Id from the agent. + * @return array|boolean Agents ids or false if error. */ function agents_get_agent_id_by_alias($alias) { diff --git a/pandora_console/include/functions_api.php b/pandora_console/include/functions_api.php index 980bfc0d25..03743c6907 100644 --- a/pandora_console/include/functions_api.php +++ b/pandora_console/include/functions_api.php @@ -6867,115 +6867,6 @@ function api_set_planned_downtimes_additem($id, $thrash1, $other, $thrash3) } -/** - * Add data module to policy. And return id from new module. - * - * @param string $id Id of the target policy. - * @param $thrash1 Don't use. - * @param array $other it's array, $other as param is ;;; - * ;;;;;;;; - * ;;;;; - * ;;;;; - * ;; in this order - * and separator char (after text ; ) and separator (pass in param othermode as othermode=url_encode_separator_) - * example: - * - * example: - * - * api.php?op=set&op2=add_data_module_policy&id=1&other=data_module_policy_example_name~2~data%20module%20created%20by%20Api~2~0~0~50.00~10~20~180~~21~35~~1~module_begin%0dmodule_name%20pandora_process%0dmodule_type%20generic_data%0dmodule_exec%20ps%20aux%20|%20grep%20pandora%20|%20wc%20-l%0dmodule_end&other_mode=url_encode_separator_~ - * - * @param $thrash3 Don't use - */ -function api_set_add_data_module_policy($id, $thrash1, $other, $thrash3) -{ - if (defined('METACONSOLE')) { - return; - } - - if ($id == '') { - returnError('error_add_data_module_policy', __('Error adding data module to policy. Id_policy cannot be left blank.')); - return; - } - - if (enterprise_hook('policies_check_user_policy', [$id]) === false) { - returnError('forbidden', 'string'); - return; - } - - if ($other['data'][0] == '') { - returnError('error_add_data_module_policy', __('Error adding data module to policy. Module_name cannot be left blank.')); - return; - } - - // Check if the module is already in the policy - $name_module_policy = enterprise_hook('policies_get_modules', [$id, ['name' => $other['data'][0]], 'name']); - - if ($name_module_policy === ENTERPRISE_NOT_HOOK) { - returnError('error_add_data_module_policy', __('Error adding data module to policy.')); - return; - } - - $disabled_types_event = []; - $disabled_types_event[EVENTS_GOING_UNKNOWN] = (int) !$other['data'][16]; - $disabled_types_event = json_encode($disabled_types_event); - - $values = []; - $values['id_tipo_modulo'] = $other['data'][1]; - $values['description'] = $other['data'][2]; - $values['id_module_group'] = $other['data'][3]; - $values['min'] = $other['data'][4]; - $values['max'] = $other['data'][5]; - $values['post_process'] = $other['data'][6]; - $values['module_interval'] = $other['data'][7]; - $values['min_warning'] = $other['data'][8]; - $values['max_warning'] = $other['data'][9]; - $values['str_warning'] = $other['data'][10]; - $values['min_critical'] = $other['data'][11]; - $values['max_critical'] = $other['data'][12]; - $values['str_critical'] = $other['data'][13]; - $values['history_data'] = $other['data'][14]; - $values['configuration_data'] = $other['data'][15]; - $values['disabled_types_event'] = $disabled_types_event; - $values['module_macros'] = $other['data'][17]; - $values['min_ff_event'] = $other['data'][18]; - $values['each_ff'] = $other['data'][19]; - $values['min_ff_event_normal'] = $other['data'][20]; - $values['min_ff_event_warning'] = $other['data'][21]; - $values['min_ff_event_critical'] = $other['data'][22]; - $values['ff_timeout'] = $other['data'][23]; - $values['ff_type'] = $other['data'][24]; - - if ($name_module_policy !== false) { - if ($name_module_policy[0]['name'] == $other['data'][0]) { - returnError( - 'error_add_data_module_policy', - __('Error adding data module to policy. The module is already in the policy.') - ); - return; - } - } - - $success = enterprise_hook( - 'policies_create_module', - [ - $other['data'][0], - $id, - 1, - $values, - false, - ] - ); - - if ($success) { - // returnData('string', array('type' => 'string', 'data' => __('Data module added to policy. Is necessary to apply the policy in order to changes take effect.'))); - returnData('string', ['type' => 'string', 'data' => $success]); - } else { - returnError('error_add_data_module_policy', 'Error adding data module to policy.'); - } - -} - - /** * Update data module in policy. And return id from new module. * From 6ea19ac5fa3b408b9d62effc5784bfbd7a5461b5 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Tue, 19 Jan 2021 18:00:28 +0100 Subject: [PATCH 02/49] External changes from #6158 --- pandora_console/godmode/wizards/Wizard.main.php | 3 --- pandora_console/include/lib/Entity.php | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/pandora_console/godmode/wizards/Wizard.main.php b/pandora_console/godmode/wizards/Wizard.main.php index 6783ba20e1..39ffb2121d 100644 --- a/pandora_console/godmode/wizards/Wizard.main.php +++ b/pandora_console/godmode/wizards/Wizard.main.php @@ -31,9 +31,6 @@ global $config; require_once $config['homedir'].'/vendor/autoload.php'; require_once $config['homedir'].'/include/class/HTML.class.php'; - -use \HTML; - /** * Global Wizard generic class. Needs to be inherited. * diff --git a/pandora_console/include/lib/Entity.php b/pandora_console/include/lib/Entity.php index 8ef3354bb8..ead8d8fe14 100644 --- a/pandora_console/include/lib/Entity.php +++ b/pandora_console/include/lib/Entity.php @@ -61,12 +61,12 @@ abstract class Entity /** * Instances a new object using array definition. * - * @param string $class_str Class name. * @param array $data Fields data. + * @param string $class_str Class name. * * @return object With current definition. */ - public static function build(string $class_str, array $data=[]) + public static function build(array $data=[], string $class_str=__CLASS__) { $obj = new $class_str(); // Set values. From 16029f7fafaf8763072b60c174d3294ecce73906 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Wed, 20 Jan 2021 20:08:34 +0100 Subject: [PATCH 03/49] Significant fixes --- pandora_console/include/lib/Entity.php | 5 ++- pandora_console/include/lib/ModuleType.php | 47 ++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/pandora_console/include/lib/Entity.php b/pandora_console/include/lib/Entity.php index ead8d8fe14..40581266f3 100644 --- a/pandora_console/include/lib/Entity.php +++ b/pandora_console/include/lib/Entity.php @@ -149,7 +149,10 @@ abstract class Entity { // Prioritize written methods over dynamic ones. if (method_exists($this, $methodName) === true) { - return $this->{$methodName}($params); + return call_user_func_array( + $this->{$methodName}, + $params + ); } // Enterprise capabilities. diff --git a/pandora_console/include/lib/ModuleType.php b/pandora_console/include/lib/ModuleType.php index c14a709298..c9bb192a9a 100644 --- a/pandora_console/include/lib/ModuleType.php +++ b/pandora_console/include/lib/ModuleType.php @@ -91,4 +91,51 @@ class ModuleType extends Entity } + /** + * Validate id_module and id_module_type pair. + * + * @param integer $id_module_type Id module_type. + * @param integer $id_modulo Id modulo. + * + * @return boolean True success, false if not. + */ + public static function validate(int $id_module_type, int $id_modulo) + { + switch ($id_modulo) { + default: + case MODULE_PLUGIN: + case MODULE_PREDICTION: + case MODULE_DATA: + case MODULE_WMI: + if (($id_module_type < 6 || $id_module_type > 18) === false + && ($id_module_type < 29 || $id_module_type > 34) === false + && ($id_module_type === 25) + ) { + return false; + } + break; + case MODULE_NETWORK: + case MODULE_SNMP: + if ($id_module_type < 6 || $id_module_type > 18) { + return false; + } + break; + + case MODULE_WEB: + if ($id_module_type !== 25) { + return false; + } + break; + + case MODULE_WUX: + if ($id_module_type < 29 || $id_module_type > 34) { + return false; + } + break; + } + + return true; + } + + } From 9d2133187f806ff50f2345506c96b9d7ccee773f Mon Sep 17 00:00:00 2001 From: rafael Date: Fri, 22 Jan 2021 14:59:42 +0100 Subject: [PATCH 04/49] messaging integrations --- .../.vscode/settings.json | 3 + .../message_app_connectors/discord/.gitignore | 1 + .../discord/pandora_discord_cli.py | 173 +++++++++++++++++ .../discord/requirements.txt | 6 + .../discord/test-exec.txt | 19 ++ .../gchat/pandora-gchat-cli.py | 111 +++++++++++ .../gchat/requirements.txt | 5 + .../gchat/test-exec.txt | 14 ++ .../ms-teams/pandora-msteams-cli.py | 83 ++++++++ .../ms-teams/pandora-teams-cli.py | 81 ++++++++ .../ms-teams/requirements.txt | 6 + .../ms-teams/test-exec.txt | 15 ++ .../message_app_connectors/slack/.gitignore | 1 + .../slack/pandora-slack-cli.py | 177 ++++++++++++++++++ .../slack/requirements.txt | 6 + .../slack/test_exec.txt | 14 ++ .../telegram-bot-cli/pandora-telegram-cli.py | 27 +++ .../telegram-bot-cli/requirements.txt | 5 + .../telegram-bot-cli/test_exec.txt | 6 + 19 files changed, 753 insertions(+) create mode 100644 pandora_plugins/message_app_connectors/.vscode/settings.json create mode 100644 pandora_plugins/message_app_connectors/discord/.gitignore create mode 100644 pandora_plugins/message_app_connectors/discord/pandora_discord_cli.py create mode 100644 pandora_plugins/message_app_connectors/discord/requirements.txt create mode 100644 pandora_plugins/message_app_connectors/discord/test-exec.txt create mode 100644 pandora_plugins/message_app_connectors/gchat/pandora-gchat-cli.py create mode 100644 pandora_plugins/message_app_connectors/gchat/requirements.txt create mode 100644 pandora_plugins/message_app_connectors/gchat/test-exec.txt create mode 100755 pandora_plugins/message_app_connectors/ms-teams/pandora-msteams-cli.py create mode 100755 pandora_plugins/message_app_connectors/ms-teams/pandora-teams-cli.py create mode 100644 pandora_plugins/message_app_connectors/ms-teams/requirements.txt create mode 100644 pandora_plugins/message_app_connectors/ms-teams/test-exec.txt create mode 100644 pandora_plugins/message_app_connectors/slack/.gitignore create mode 100644 pandora_plugins/message_app_connectors/slack/pandora-slack-cli.py create mode 100644 pandora_plugins/message_app_connectors/slack/requirements.txt create mode 100644 pandora_plugins/message_app_connectors/slack/test_exec.txt create mode 100644 pandora_plugins/message_app_connectors/telegram-bot-cli/pandora-telegram-cli.py create mode 100644 pandora_plugins/message_app_connectors/telegram-bot-cli/requirements.txt create mode 100644 pandora_plugins/message_app_connectors/telegram-bot-cli/test_exec.txt diff --git a/pandora_plugins/message_app_connectors/.vscode/settings.json b/pandora_plugins/message_app_connectors/.vscode/settings.json new file mode 100644 index 0000000000..dd432a8cda --- /dev/null +++ b/pandora_plugins/message_app_connectors/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "slack/venv/bin/python" +} \ No newline at end of file diff --git a/pandora_plugins/message_app_connectors/discord/.gitignore b/pandora_plugins/message_app_connectors/discord/.gitignore new file mode 100644 index 0000000000..5ceb3864c2 --- /dev/null +++ b/pandora_plugins/message_app_connectors/discord/.gitignore @@ -0,0 +1 @@ +venv diff --git a/pandora_plugins/message_app_connectors/discord/pandora_discord_cli.py b/pandora_plugins/message_app_connectors/discord/pandora_discord_cli.py new file mode 100644 index 0000000000..5a278a0e6b --- /dev/null +++ b/pandora_plugins/message_app_connectors/discord/pandora_discord_cli.py @@ -0,0 +1,173 @@ +import requests, argparse, sys, os +from datetime import datetime +from re import search +from base64 import b64decode +from discord_webhook import DiscordWebhook, DiscordEmbed + + +### Variables and arg parser ### +parser = argparse.ArgumentParser(description='Test parser dic') +parser.add_argument('-d', '--data', help='Data in coma separate keypairs. Ex: test=5,house=2', required=True) +parser.add_argument('-u', '--url', help='Discord webhook URL', required=True) +parser.add_argument('-t', '--alert_tittle', help='Alert tittle', default='PandoraFMS alert fired') +parser.add_argument('-D', '--alert_desc', help='Alert description', default='alert') +parser.add_argument('-m', '--message', help='Discord message', default='') +parser.add_argument('-T','--tittle_color', help='Alert tittle descripcion in HEX EX: 53e514', default="53e514") +parser.add_argument('-A','--author', help='Alert custom author', default='PandoraFMS') +parser.add_argument('-F','--footer', help='Custom footer', default='') +parser.add_argument('--avatar_url', help='Custom avatar URL for the user which send the alert', default='') +parser.add_argument('--author_url', help='Alert custom url author', default='') +parser.add_argument('--author_icon_url', help='Alert custom author icon url ', default='') +parser.add_argument('--thumb', help='Custom thumbnail url', default='') +parser.add_argument('--api_conf', help='Api configuration parameters in coma separate keypairs. EX "user=admin,pass=pandora,api_pass=1234,api_url=http://test.artica.es/pandora_console/include/api.php"') +parser.add_argument('--module_graph', help='Uses pandora API to generate a module graph and attach it to the alert needs module_id and interval parameters in coma separate keypairs. EX "module_id=55,interval=3600"') +parser.add_argument('--tmp_dir', help='Temporary path to store grph images', default='/tmp') + + +args = parser.parse_args() + +### Functions: +def parse_dic(cValues): + """convert coma separate keypairs into a dic. EX "test=5,house=8,market=2" wil return "{'test': '5', 'casa': '8', 'mercado': '2'}" """ + data={} + try : + for kv in cValues.split(","): + k,v = kv.strip().split("=") + data[k.strip()]=v.strip() + except Exception as e : + print(f"Warning, error parsing keypairs values: {e}") + return data + +def add_embed_itmes(data): + """iterate dictionary and set webhook fields, one for eacj keypair""" + for k, v in data.items() : + embed.add_embed_field(name=k, value=v) + +def parse_api_conf(cConf): + if args.api_conf : + # Parse Api config + print ("Api config enable") + apid = parse_dic(cConf) + + if apid.get("user") is None: + print ("Error no user defined in api_conf keypairs, skiping graph generation.") + return + + if apid.get("pass") is None: + print ("Error no password defined in api_conf keypairs, skiping graph generation.") + return + + if apid.get("api_pass") is None: + print ("Error no Api pass defined in api_conf keypairs, skiping graph generation.") + return + + if apid.get("api_url") is None: + apid['api_url'] = "http://127.0.0.1/pandora_console/include/api.php" + #print(f"api_url: {apid['api_url']}") + + return apid + else: + return None + +def parse_graph_conf(cGraph): + if not args.api_conf: + print ("To get graph data api conf shoul be provided please set an api config") + return + + if cGraph : + # Parse Api config + graphd = parse_dic(cGraph) + if graphd.get("module_id") is None: + print ("error no module_id defined in module_graph keypairs, skiping graph generation.") + return + + if graphd.get("interval") is None: + graphd["interval"] = 3600 + + return graphd + else: + return None + +def get_graph_by_moduleid (baseUrl,pUser, pPass, apiPass, moduleId, graphInterval) : + sep="url_encode_separator_%7C" + try: + url = f"{baseUrl}?op=get&op2=module_graph&id={moduleId}&other={graphInterval}%7C1&other_mode={sep}C&apipass={apiPass}&api=1&user={pUser}&pass={pPass}" + graph = requests.get(url) + if graph.status_code != 200: + print (f"Error requested api url, status code: {graph.status_code}. Skiping graph generation") + return None + if graph.text == "auth error": + print (f"Error requested Pandora api url, status code: {graph.text}. Skiping graph generation") + return None + if graph.text == "Id does not exist in database.": + print (f"Error requested Pandora api url, status code: {graph.text}. Skiping graph generation") + return None + except: + print("Error requested api url. Skiping graph generation") + return None + + return graph + +## Main +## Basic message +webhook = DiscordWebhook(url=args.url, content=args.message, avatar_url=args.avatar_url) +# create embed object for webhook +embed = DiscordEmbed(title=args.alert_tittle, description=args.alert_desc, color=int(args.tittle_color, 16)) +# set author +embed.set_author(name=args.author, url=args.author_url, icon_url=args.author_icon_url) +# set thumbnail +if args.thumb: embed.set_thumbnail(url=args.thumb) +# set footer +if args.footer : embed.set_footer(text=args.footer) +# set timestamp (default is now) +embed.set_timestamp() +# Parse data keys +data = parse_dic(args.data) +# add fields to embed +add_embed_itmes(data) + +# Parse api config +api = parse_api_conf(args.api_conf) +# Parse graph config +graph_cfg = parse_graph_conf(args.module_graph) + +## Generate module graph + +if graph_cfg is not None and api is not None: + graph = get_graph_by_moduleid (api["api_url"],api["user"], api["pass"], api["api_pass"], graph_cfg["module_id"], graph_cfg["interval"]) + + if graph is not None: + try: + namef = f"graph_{graph_cfg['module_id']}.{datetime.now().strftime('%s')}.png" + filename = f"{args.tmp_dir}/{namef}" + with open(filename, "wb") as f: + f.write(b64decode(graph.text)) + f.close + print (f"Graph generated on temporary file {filename}") + except Exception as e : + print(f"Error, cant generate graph file: {e}") + filename = None + + try: + with open(filename, "rb") as F: + webhook.add_file(file=F.read(), filename=namef) + f.close + embed.set_image(url=f'attachment://{namef}') + except Exception as e : + print(f"Error, cant add graph file: {e}") + filename = None + +# add embed object to webhook +webhook.add_embed(embed) + +# Execute webhook send +response = webhook.execute() + +# clean temp file if exist +try: + os.remove(filename) +except: + pass + +# print response +print (f"Message sent. status code: {response[0].status_code}") if response[0].status_code == 200 else print (f"Error status code: {response[0].status_code}") diff --git a/pandora_plugins/message_app_connectors/discord/requirements.txt b/pandora_plugins/message_app_connectors/discord/requirements.txt new file mode 100644 index 0000000000..edbda16382 --- /dev/null +++ b/pandora_plugins/message_app_connectors/discord/requirements.txt @@ -0,0 +1,6 @@ +certifi==2020.11.8 +chardet==3.0.4 +discord-webhook==0.11.0 +idna==2.10 +requests==2.24.0 +urllib3==1.25.11 diff --git a/pandora_plugins/message_app_connectors/discord/test-exec.txt b/pandora_plugins/message_app_connectors/discord/test-exec.txt new file mode 100644 index 0000000000..f63e7f5084 --- /dev/null +++ b/pandora_plugins/message_app_connectors/discord/test-exec.txt @@ -0,0 +1,19 @@ +#exetution example + +python3 pandora_discord_cli.py -d "Agent=Server22,Module=test_module,Group=Servers,State=Critical,Data=22,Timestamp=2020-11-04 11:14:00" \ +-u https://discord.com/api/webhooks/702868786843353179/YI1LOUzC64EcYcpPVB_ \ +--tittle_color ed2512 \ +--footer "PandoraFMS Alert" \ +-A "Sauron Systems" \ +--author_icon_url "https://pandorafms.com/wp-content/uploads/2019/04/software-de-monitorizacion-pandorafms-logo.png" \ +-m "We have bad news for you. Something is on CRITICAL status 2" \ +--author_url https://pandorafms.com/ \ +-D "Module test is going to critical" \ +--thumb https://pandorafms.com/images/alerta_roja.png \ +--avatar_url https://pandorafms.com/images/alerta_roja.png \ +--api_conf "user=admin,pass=pandora,api_pass=pandora,api_url=http://192.168.80.222/pandora_console/include/api.php" \ +--module_graph "module_id=6266, interval=3600" \ +--tmp_dir /tmp + +# Pandora FMS command definition example +python3 /usr/share/pandora_server/util/pandora-discord/pandora_discord_cli.py -u "_field1_" -d "_field2_" -D "_field3_" --tittle_color _field4_ --thumb _field5_ --api_conf "_field6_" --module_graph "_field7_" -A "Pandora FMS Alert system" --footer "PandoraFMS" --author_icon_url "https://pandorafms.com/wp-content/uploads/2019/04/software-de-monitorizacion-pandorafms-logo.png" --author_url https://pandorafms.com/ --tmp_dir /tmp \ No newline at end of file diff --git a/pandora_plugins/message_app_connectors/gchat/pandora-gchat-cli.py b/pandora_plugins/message_app_connectors/gchat/pandora-gchat-cli.py new file mode 100644 index 0000000000..5e2a47b3f8 --- /dev/null +++ b/pandora_plugins/message_app_connectors/gchat/pandora-gchat-cli.py @@ -0,0 +1,111 @@ +import requests +import argparse +import sys +import os +import json + +### Variables and arg parser ### +parser = argparse.ArgumentParser(description='Google chat webhook conector') +parser.add_argument( + '-d', '--data', help='Data in coma separate keypairs. Ex: test=5,house=2', required=True) +parser.add_argument( + '-u', '--url', help='Google chat webhook URL', required=True) +parser.add_argument('-t', '--alert_title', help='Alert title', + default='PandoraFMS alert system') +parser.add_argument('-D', '--alert_desc', + help='Alert description', default='Alert Fired') +parser.add_argument('--thumb', help='Custom thumbnail url', + default="https://pandorafms.com/images/alerta_roja.png") +parser.add_argument('--btn_desc', help='button description', default=None) +parser.add_argument('--btn_url', help='button url', + default="https://pandorafms.com/") + + +args = parser.parse_args() + +# classes + + +class Message(): + def __init__(self, title, subtitle, imageurl='https://goo.gl/aeDtrS'): + """ Initialize message object, setting header options""" + self.dic = { + 'cards': [] + } + + header = {'header': {'title': title, + 'subtitle': subtitle, 'imageUrl': imageurl}} + self.dic['cards'].append(header) + + sections = {'sections': []} + self.dic['cards'].append(sections) + + def add_header(self, title, subtitle, imageurl='https://goo.gl/aeDtrS'): + """Add header to message object""" + header = {'header': {'title': title, + 'subtitle': subtitle, 'imageUrl': imageurl}} + self.dic['cards'].append(header) + + def add_value(self, keyval): + """Add key value pairs data to message object, keyval should be a dictionary""" + m = '' + arr = [] + for k, v in keyval.items(): + m += f"{k}: {v} \n" + + arr.append({'textParagraph': {'text': m}}) + + widgets = {'widgets': arr} + self.dic['cards'][1]['sections'].append(widgets) + + def add_buttom(self, desc, url): + """Add button to message object""" + btn = [{"textButton": {"text": desc, "onClick": {"openLink": {'url': url}}}}] + arr = [({'buttons': btn})] + + widgets = {'widgets': arr} + self.dic['cards'][1]['sections'].append(widgets) + +# functions + + +def parse_dic(cValues): + """convert coma separate keypairs into a dic. EX "test=5,house=8,market=2" wil return "{'test': '5', 'casa': '8', 'mercado': '2'}" """ + data = {} + try: + for kv in cValues.split(","): + k, v = kv.strip().split("=") + data[k.strip()] = v.strip() + except Exception as e: + print(f"Warning, error parsing keypairs values: {e}") + return data + + +def sendMessage(url, message): + """sends google chat message""" + message = json.dumps(message) + try: + header = {'Content-Type': 'application/json; charset: UTF-8'} + response = requests.post(url, headers=header, data=message) + + print(f"Mesage sent succefuly: {response.status_code}") + except: + print("Error requested api url. Skiping graph generation") + return None + return response + + +if __name__ == '__main__': + + # Initializaate message object + a = Message(args.alert_title, args.alert_desc, args.thumb) + # Parse data values + data = parse_dic(args.data) + # Add datavalues into message object + a.add_value(data) + # Chek button parameters and add it to the message object + if args.btn_desc != None: + a.add_buttom(args.btn_desc, args.btn_url) + + # Send message + sendMessage(args.url, a.dic) diff --git a/pandora_plugins/message_app_connectors/gchat/requirements.txt b/pandora_plugins/message_app_connectors/gchat/requirements.txt new file mode 100644 index 0000000000..2d0a3be144 --- /dev/null +++ b/pandora_plugins/message_app_connectors/gchat/requirements.txt @@ -0,0 +1,5 @@ +certifi==2020.12.5 +chardet==3.0.4 +idna==2.10 +requests==2.25.0 +urllib3==1.26.2 diff --git a/pandora_plugins/message_app_connectors/gchat/test-exec.txt b/pandora_plugins/message_app_connectors/gchat/test-exec.txt new file mode 100644 index 0000000000..d2703d9e9a --- /dev/null +++ b/pandora_plugins/message_app_connectors/gchat/test-exec.txt @@ -0,0 +1,14 @@ +#exetution example + +python3 pandora-gchat-cli.py \ +-d 'Agent=Server22,Module=test_module,Group=Servers,State=Critical,Data=22,Timestamp=2020-11-04 11:14:00' \ +-u https://chat.googleapis.com/v1/spaces/AAAA6-AOZQ8/messages\?key\=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI\&token\=_ZGwKN4lue8ZiDKGVMLfMay3hLRrYjmgYr2fXPqPy0c%3D \ +-t 'PandoraFMS Alert' \ +-D 'Alert Fired' \ +--thumb https://pandorafms.com/images/alerta_roja.png \ +--btn_desc pandorafms.com \ +--btn_url https://pandorafms.com/ + + +# Pandora FMS command definition example +python3 /usr/share/pandora_server/util/pandora-gchat/pandora-gchat-cli.py -d '_field1_' -u '_field2_' -t '_field3_' -D '_field4_' --thumb '_field5_' --btn_desc pandorafms.com --btn_url https://pandorafms.com/ \ No newline at end of file diff --git a/pandora_plugins/message_app_connectors/ms-teams/pandora-msteams-cli.py b/pandora_plugins/message_app_connectors/ms-teams/pandora-msteams-cli.py new file mode 100755 index 0000000000..f0d4ac89a8 --- /dev/null +++ b/pandora_plugins/message_app_connectors/ms-teams/pandora-msteams-cli.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import argparse, pymsteams + +parser = argparse.ArgumentParser(description='MS Teams connector') +parser.add_argument('-d', '--data', help='Data in coma separate keypairs. Ex: test=5,house=2', required=True) +parser.add_argument('-u', '--url', help='Teams webhook URL', required=True) +parser.add_argument('-t', '--alert_tittle', help='Alert tittle', default='PandoraFMS alert fired') +parser.add_argument('-D', '--alert_desc', help='Alert description', default='Alert Fired') +parser.add_argument('-m', '--message', help='Alert message', default='') +parser.add_argument('-T','--tittle_color', help='Alert tittle descripcion in HEX EX: 53e514', default="ff0000") +parser.add_argument('--sub_desc', help='Alert sub description', default='Alert Fired') +parser.add_argument('--thumb', help='Custom thumbnail url', default="https://pandorafms.com/images/alerta_roja.png") +parser.add_argument('--button', help='Pandora button Url', default='https://pandorafms.com') +parser.add_argument('--button_desc', help='Pandora button description', default='Open web console') + +args = parser.parse_args() + +### Functions: +def parse_dic(cValues): + """convert coma separate keypairs into a dic. EX "test=5,house=8,market=2" wil return "{'test': '5', 'casa': '8', 'mercado': '2'}" """ + data={} + try : + for kv in cValues.split(","): + k,v = kv.strip().split("=") + data[k.strip()]=v.strip() + except Exception as e : + print(f"Warning, error parsing keypairs values: {e}") + return data + +def add_embed_itmes(data): + """iterate dictionary and set webhook fields, one for eacj keypair""" + for k, v in data.items() : + myMessageSection.addFact(f"{k}:", v) + +##Main + +# You must create the connectorcard object with the Microsoft Webhook URL +myTeamsMessage = pymsteams.connectorcard(args.url) + +# Set Summary +myTeamsMessage.summary('Pandora FMS') + +# Set Alert tittle +myTeamsMessage.title(args.alert_tittle) + +# Set link buttom +myTeamsMessage.addLinkButton(args.button_desc, args.button) + +# Set message color +myTeamsMessage.color(args.tittle_color) + +# create the section +myMessageSection = pymsteams.cardsection() + +# Section Title +myMessageSection.title(args.message) + +# Activity Elements +myMessageSection.activityTitle(args.alert_desc) +myMessageSection.activitySubtitle(args.sub_desc) +myMessageSection.activityImage(args.thumb) + +# Facts are key value pairs displayed in a list. +data = parse_dic(args.data) +add_embed_itmes(data) + +# Section Text +# myMessageSection.text("This is my section text") + +# Section Images +# myMessageSection.addImage("http://i.imgur.com/c4jt321l.png", ititle="This Is Fine") + +# Add your section to the connector card object before sending +myTeamsMessage.addSection(myMessageSection) + +# Then send the card +try: + myTeamsMessage.send() +except Exception as e : + exit(f"Error sending to message: {e}") + +print (f"Mesage sent succefuly: {myTeamsMessage.last_http_status}") \ No newline at end of file diff --git a/pandora_plugins/message_app_connectors/ms-teams/pandora-teams-cli.py b/pandora_plugins/message_app_connectors/ms-teams/pandora-teams-cli.py new file mode 100755 index 0000000000..4bd997b38f --- /dev/null +++ b/pandora_plugins/message_app_connectors/ms-teams/pandora-teams-cli.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import argparse, pymsteams + +parser = argparse.ArgumentParser(description='MsTeams connector') +parser.add_argument('-d', '--data', help='Data in coma separate keypairs. Ex: test=5,house=2', required=True) +parser.add_argument('-u', '--url', help='Teams webhook URL', required=True) +parser.add_argument('-t', '--alert_tittle', help='Alert tittle', default='PandoraFMS alert fired') +parser.add_argument('-D', '--alert_desc', help='Alert description', default='Alert Fired') +parser.add_argument('-m', '--message', help='Alert message', default='') +parser.add_argument('-T','--tittle_color', help='Alert tittle descripcion in HEX EX: 53e514', default="53e514") +parser.add_argument('--sub_desc', help='Alert sub description', default='Alert Fired') +parser.add_argument('--thumb', help='Custom thumbnail url', default="https://pandorafms.com/images/alerta_roja.png") +parser.add_argument('--button', help='Pandora button Url', default='https://pandorafms.com') +parser.add_argument('--button_desc', help='Pandora button description', default='Open web console') + +args = parser.parse_args() + +### Functions: +def parse_dic(cValues): + """convert coma separate keypairs into a dic. EX "test=5,house=8,market=2" wil return "{'test': '5', 'casa': '8', 'mercado': '2'}" """ + data={} + try : + for kv in cValues.split(","): + k,v = kv.strip().split("=") + data[k.strip()]=v.strip() + except Exception as e : + print(f"Warning, error parsing keypairs values: {e}") + return data + +def add_embed_itmes(data): + """iterate dictionary and set webhook fields, one for eacj keypair""" + for k, v in data.items() : + myMessageSection.addFact(f"{k}:", v) + +##Main + +# You must create the connectorcard object with the Microsoft Webhook URL +myTeamsMessage = pymsteams.connectorcard(args.url) + +# Set Summary +myTeamsMessage.summary(args.message) + +# Set Alert tittle +myTeamsMessage.title(args.alert_tittle) + +# Set link buttom +myTeamsMessage.addLinkButton(args.button_desc, args.button) + +# Set message color +myTeamsMessage.color(args.tittle_color) + +# create the section +myMessageSection = pymsteams.cardsection() + +# Section Title +myMessageSection.title(args.message) + +# Activity Elements +myMessageSection.activityTitle(args.alert_desc) +myMessageSection.activitySubtitle(args.sub_desc) +myMessageSection.activityImage(args.thumb) + +# Facts are key value pairs displayed in a list. +data = parse_dic(args.data) +add_embed_itmes(data) + +# Section Text +# myMessageSection.text("This is my section text") + +# Section Images +# myMessageSection.addImage("http://i.imgur.com/c4jt321l.png", ititle="This Is Fine") + +# Add your section to the connector card object before sending +myTeamsMessage.addSection(myMessageSection) + +# Then send the card +try: + myTeamsMessage.send() +except Exception as e : + print(f"Error sending to message: {e}") \ No newline at end of file diff --git a/pandora_plugins/message_app_connectors/ms-teams/requirements.txt b/pandora_plugins/message_app_connectors/ms-teams/requirements.txt new file mode 100644 index 0000000000..da3bc60eee --- /dev/null +++ b/pandora_plugins/message_app_connectors/ms-teams/requirements.txt @@ -0,0 +1,6 @@ +certifi==2020.11.8 +chardet==3.0.4 +idna==2.10 +pymsteams==0.1.14 +requests==2.25.0 +urllib3==1.26.2 diff --git a/pandora_plugins/message_app_connectors/ms-teams/test-exec.txt b/pandora_plugins/message_app_connectors/ms-teams/test-exec.txt new file mode 100644 index 0000000000..f92f6ae2c9 --- /dev/null +++ b/pandora_plugins/message_app_connectors/ms-teams/test-exec.txt @@ -0,0 +1,15 @@ +#exetution example + +python3 pandora-teams-cli.py -d "Agent=Server22,Module=test_module,Group=Servers,State=Critical,Data=22,Timestamp=2020-11-04 11:14:00" \ +-u https://outlook.office.com/webhook/6f819e54-9c3f-4f87-94f4-90159496ef12@b3b55021-a812-46af-a5ef-127cc662d5b7/IncomingWebhook/634dafb7fe6549c9a214dd7fa9b97416/76c50d52-8678-49c2-9279-9f7bb3bb5a07 \ +-t "Alert Tittle" \ +-D "Alert description" \ +-m "Pandora FMS Alert message" \ +-T 53e514 \ +--sub_desc "Alert subdescription" \ +--thumb "https://pandorafms.com/images/alerta_roja.png" \ +--button https://pandorafms.com \ +--button_desc "Open PandoraFMS" + +# Pandora FMS command definition example +python3 /usr/share/pandora_server/util/pandora-teams/pandora-msteams-cli.py -d "_field1_" -u "_field2_" -t "_field3_" -D "_field4_" -m "_field5_" -T _field6_ --sub_desc "_field7_" --thumb "_field8_" --button http://newfork.artica.es/pandora_console/ --button_desc "Open PandoraFMS Console" diff --git a/pandora_plugins/message_app_connectors/slack/.gitignore b/pandora_plugins/message_app_connectors/slack/.gitignore new file mode 100644 index 0000000000..5ceb3864c2 --- /dev/null +++ b/pandora_plugins/message_app_connectors/slack/.gitignore @@ -0,0 +1 @@ +venv diff --git a/pandora_plugins/message_app_connectors/slack/pandora-slack-cli.py b/pandora_plugins/message_app_connectors/slack/pandora-slack-cli.py new file mode 100644 index 0000000000..31cfa97811 --- /dev/null +++ b/pandora_plugins/message_app_connectors/slack/pandora-slack-cli.py @@ -0,0 +1,177 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import requests, argparse, sys, os +from slack_sdk import WebClient +from slack_sdk.errors import SlackApiError +from datetime import datetime +from re import search +from base64 import b64decode + + + +### Variables and arg parser ### +parser = argparse.ArgumentParser(description='Slack BOT APP conector') +parser.add_argument('-d', '--data', help='Data in coma separate keypairs. Ex: test=5,house=2', required=True) +parser.add_argument('-t', '--token', help='BOT Token', required=True) +parser.add_argument('-c', '--channel', help='Slack channel id/name', required=True) +parser.add_argument('-e', '--emoji', help='Slack emoji for tittle, default: :red_circle:', default=':red_circle:') +parser.add_argument('-T', '--tittle', help='Alert tittle, default: PandoraFMS alert', default='PandoraFMS alert') +parser.add_argument('-D', '--desc', help='Slack description message', default='') +parser.add_argument('-F','--footer', help='Custom footer, default: PandoraFMS', default='PandoraFMS') +parser.add_argument('--api_conf', help='Api configuration parameters in coma separate keypairs. EX "user=admin,pass=pandora,api_pass=1234,api_url=http://test.artica.es/pandora_console/include/api.php"') +parser.add_argument('--module_graph', help='Uses pandora API to generate a module graph and attach it to the alert needs module_id and interval parameters in coma separate keypairs. EX "module_id=55,interval=3600"') +parser.add_argument('--tmp_dir', help='Temporary path to store grph images', default='/tmp') + +args = parser.parse_args() +filename = None + +#Functions + +def parse_dic(cValues): + """convert coma separate keypairs into a dic. EX "test=5,house=8,market=2" wil return "{'test': '5', 'casa': '8', 'mercado': '2'}" """ + data={} + try : + for kv in cValues.split(","): + k,v = kv.strip().split("=") + data[k.strip()]=v.strip() + except Exception as e : + print(f"Warning, error parsing keypairs values: {e}") + return data + +def compose_message (values, tittle, emoji, message, footer): + """Format Text""" + values = parse_dic(values) + m = f"{emoji} *{tittle}*\n_{message}_\n\n" + + for k, v in values.items() : + m += f"*{k}* : {v}\n" + return m + +def parse_api_conf(cConf): + """Check apiconfiguration parameters """ + if args.api_conf : + # Parse Api config + print ("Api config enable") + apid = parse_dic(cConf) + + if apid.get("user") is None: + print ("Warning. no user defined in api_conf keypairs, skiping graph generation.") + return None + + if apid.get("pass") is None: + print ("Warning. no password defined in api_conf keypairs, skiping graph generation.") + return None + + if apid.get("api_pass") is None: + print ("Warning. no api pass defined in api_conf keypairs, skiping graph generation.") + return None + + if apid.get("api_url") is None: + apid['api_url'] = "http://127.0.0.1/pandora_console/include/api.php" + #print(f"api_url: {apid['api_url']}") + + return apid + else: + return None + +def parse_graph_conf(cGraph): + """Check module graph parameters """ + if cGraph : + # Parse Api config + graphd = parse_dic(cGraph) + if graphd.get("module_id") is None: + print ("Warning. no module_id defined in module_graph keypairs, skiping graph generation.") + return + + if graphd.get("interval") is None: + graphd["interval"] = 3600 + + return graphd + else: + print("Warning. no module_graph keypairs defined, skiping graph generation") + return None + +def get_graph_by_moduleid (baseUrl,pUser, pPass, apiPass, moduleId, graphInterval, sep="url_encode_separator_%7C") : + """Call Pandorafms api to get graph""" + try: + url = f"{baseUrl}?op=get&op2=module_graph&id={moduleId}&other={graphInterval}%7C1&other_mode={sep}C&apipass={apiPass}&api=1&user={pUser}&pass={pPass}" + graph = requests.get(url) + if graph.status_code != 200: + print (f"Error requested api url, status code: {graph.status_code}. Skiping graph generation") + return None + if graph.text == "auth error": + print (f"Error requested Pandora api url, status code: {graph.text}. Skiping graph generation") + return None + if graph.text == "Id does not exist in database.": + print (f"Error requested Pandora api url, status code: {graph.text}. Skiping graph generation") + return None + + except: + print("Error requested api url. Skiping graph generation") + return None + return graph + +def send_message(message, channel, client, feddback=None): + """Send text message as slack bot""" + try: + response = client.chat_postMessage(channel=channel, text=message) + assert response["message"]["text"] == message + if feddback is not None: print(feddback) + except SlackApiError as e: + # You will get a SlackApiError if "ok" is False + assert e.response["ok"] is False + assert e.response["error"] # str like 'invalid_auth', 'channel_not_found' + print(f"Got an Slack auth error: {e.response['error']}") + exit() + +def send_image(imagepath, channel, client) : + """Send file as slack bot""" + try: + response = client.files_upload(channels=channel, file=imagepath) + assert response["file"] # the uploaded file + except SlackApiError as e: + # You will get a SlackApiError if "ok" is False + assert e.response["ok"] is False + assert e.response["error"] # str like 'invalid_auth', 'channel_not_found' + print(f"File Got an error: {e.response['error']}") + +# Main +# Intance the client object +client = WebClient(token=args.token) +# Compose message +messageString = compose_message(args.data, args.tittle, args.emoji, args.desc, args.footer) + +# Parse api config +if args.api_conf : + api = parse_api_conf(args.api_conf) + # Parse graph config + if api is not None: + graph_cfg = parse_graph_conf(args.module_graph) + + ## Generate graph + if graph_cfg is not None : + graph = get_graph_by_moduleid (api["api_url"],api["user"], api["pass"], api["api_pass"], graph_cfg["module_id"], graph_cfg["interval"]) + + if graph is not None: + try: + filename = f"{args.tmp_dir}/graph_{graph_cfg['module_id']}.{datetime.now().strftime('%s')}.png" + with open(filename, "wb") as f: + f.write(b64decode(graph.text)) + f.close + print (f"Graph generated on temporary file {filename}") + except Exception as e : + print(f"Error, cant generate graph file: {e}") + filename = None + else: filename = None + +# Send message +send_message(messageString, args.channel, client, "> Mesage sent succefuly") +if filename is not None: + if os.path.isfile(filename): send_image(filename, args.channel, client) +if args.footer: send_message(args.footer, args.channel, client) + +try: + os.remove(filename) +except: + exit() \ No newline at end of file diff --git a/pandora_plugins/message_app_connectors/slack/requirements.txt b/pandora_plugins/message_app_connectors/slack/requirements.txt new file mode 100644 index 0000000000..cdb6237a13 --- /dev/null +++ b/pandora_plugins/message_app_connectors/slack/requirements.txt @@ -0,0 +1,6 @@ +certifi==2020.11.8 +chardet==3.0.4 +idna==2.10 +requests==2.24.0 +slack-sdk==3.0.0 +urllib3==1.25.11 diff --git a/pandora_plugins/message_app_connectors/slack/test_exec.txt b/pandora_plugins/message_app_connectors/slack/test_exec.txt new file mode 100644 index 0000000000..f4639dd282 --- /dev/null +++ b/pandora_plugins/message_app_connectors/slack/test_exec.txt @@ -0,0 +1,14 @@ +#exetution example + +python3 pandora-slack-cli.py -d "Agent=Server22,Module=test_module,Group=Servers,State=Critical,Data=22,Timestamp=2020-11-04 11:14:00" \ +-t xoxb-1506287138481-1518221486533-V3QVzyBbS6lQnTKdfrdwCqYI \ +-c "varios" \ +-e ":red_circle:" \ +-T "PandoraFMS alert" \ +-D "El agente x esta en estado critico" \ +-F "Pandora FMS" \ +--api_conf "user=admin,pass=pandora,api_pass=pandora,api_url=http://192.168.80.43/pandora_console/include/api.php" \ +--module_graph "module_id=62, interval=3600" --tmp_dir /tmp + +# Pandora FMS command definition example +python3 /usr/share/pandora_server/util/pandora-slack/pandora-slack-cli.py -d "_field1_" -t _field2_ -c "_field3_" -e "_field4_" -T "_field5_" -D "_field6_" -F "Pandora FMS" --api_conf "_field7_" --module_graph "_field8_" --tmp_dir /tmp \ No newline at end of file diff --git a/pandora_plugins/message_app_connectors/telegram-bot-cli/pandora-telegram-cli.py b/pandora_plugins/message_app_connectors/telegram-bot-cli/pandora-telegram-cli.py new file mode 100644 index 0000000000..bcba8b65b0 --- /dev/null +++ b/pandora_plugins/message_app_connectors/telegram-bot-cli/pandora-telegram-cli.py @@ -0,0 +1,27 @@ +import requests, argparse, json, sys, os + +### Variables and arg parser ### +parser = argparse.ArgumentParser(description='Bot telegram cli') +parser.add_argument('-m', '--message', help='Message to be send', required=True) +parser.add_argument('-t', '--token', help='Bot token', required=True) +parser.add_argument('-c', '--chat_id', help='chat id to send messages', required=True) + + +args = parser.parse_args() + + +def send(mssg, chatId, token): + url = f"https://api.telegram.org/bot{token}/sendMessage" + headers = {'content-type': 'application/json'} + + data = { + "chat_id": chatId, + "text": mssg + } + + response = requests.get(url, data=json.dumps(data), headers=headers) + + r = response.json() + print(r) + +send(mssg=args.message, chatId=args.chat_id, token=args.token) diff --git a/pandora_plugins/message_app_connectors/telegram-bot-cli/requirements.txt b/pandora_plugins/message_app_connectors/telegram-bot-cli/requirements.txt new file mode 100644 index 0000000000..d8b263c7fb --- /dev/null +++ b/pandora_plugins/message_app_connectors/telegram-bot-cli/requirements.txt @@ -0,0 +1,5 @@ +certifi==2020.11.8 +chardet==3.0.4 +idna==2.10 +requests==2.24.0 +urllib3==1.25.11 diff --git a/pandora_plugins/message_app_connectors/telegram-bot-cli/test_exec.txt b/pandora_plugins/message_app_connectors/telegram-bot-cli/test_exec.txt new file mode 100644 index 0000000000..86844d04c2 --- /dev/null +++ b/pandora_plugins/message_app_connectors/telegram-bot-cli/test_exec.txt @@ -0,0 +1,6 @@ +#exetution example + +python3 pandora-telegram-cli.py -t 1412764845:AAG-OxOKISOXwhITLFFNm6oq5YD2KI72fTQ -c -432610056 -m "Testing pandora telegram cli" + +# Pandora FMS command definition example +python3 pandora-telegram-cli.py -t _field1_ -c _field2_ -m" _field3_" From d9428ce2158c83d5f82c35d0ba1b0ab9107ae6dd Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Mon, 25 Jan 2021 13:33:02 +0100 Subject: [PATCH 05/49] WIP DBMainainer, fixed Websockets library placement --- .../extras/delete_files/delete_files.txt | 5 +- pandora_console/include/lib/Core/Config.php | 79 ++++++ .../include/lib/Core/DBMantainer.php | 250 ++++++++++++++++++ .../lib/{ => Websockets}/WSManager.php | 10 +- .../lib/{ => Websockets}/WebSocketServer.php | 0 .../lib/{ => Websockets}/WebSocketUser.php | 0 .../vendor/composer/ClassLoader.php | 6 +- .../vendor/composer/autoload_classmap.php | 40 +-- .../vendor/composer/autoload_real.php | 4 +- .../vendor/composer/autoload_static.php | 40 +-- .../vendor/composer/platform_check.php | 26 ++ pandora_console/ws.php | 2 +- 12 files changed, 380 insertions(+), 82 deletions(-) create mode 100644 pandora_console/include/lib/Core/Config.php create mode 100644 pandora_console/include/lib/Core/DBMantainer.php rename pandora_console/include/lib/{ => Websockets}/WSManager.php (98%) rename pandora_console/include/lib/{ => Websockets}/WebSocketServer.php (100%) rename pandora_console/include/lib/{ => Websockets}/WebSocketUser.php (100%) create mode 100644 pandora_console/vendor/composer/platform_check.php diff --git a/pandora_console/extras/delete_files/delete_files.txt b/pandora_console/extras/delete_files/delete_files.txt index c647447c84..d18163093d 100644 --- a/pandora_console/extras/delete_files/delete_files.txt +++ b/pandora_console/extras/delete_files/delete_files.txt @@ -68,4 +68,7 @@ enterprise/extensions/ipam/include/javascript/ipam.js enterprise/extensions/ipam/include/javascript/IpamMapController.js enterprise/extensions/ipam/ipam_action.php enterprise/extensions/ipam.php -enterprise/extensions/ipam \ No newline at end of file +enterprise/extensions/ipam +include/lib/WSManager.php +include/lib/WebSocketServer.php +include/lib/WebSocketUser.php \ No newline at end of file diff --git a/pandora_console/include/lib/Core/Config.php b/pandora_console/include/lib/Core/Config.php new file mode 100644 index 0000000000..cda3581ed7 --- /dev/null +++ b/pandora_console/include/lib/Core/Config.php @@ -0,0 +1,79 @@ +user = $params['user']; + $this->pass = $params['pass']; + $this->host = $params['host']; + $this->port = $params['port']; + $this->name = $params['name']; + $this->charset = $params['charset']; + + // Try to connect. + $this->connect(); + } + + + /** + * Connects (if not connected) to current definition. + * + * @return boolean True if successfully connected, false if not. + */ + private function connect() + { + if ($this->connected === true) { + return true; + } + + $dbc = new \mysqli( + $this->host, + $this->user, + $this->pass, + $this->name, + $this->port + ); + + if ($dbc->connect_error === false) { + $this->dbh = null; + $this->connected = false; + $this->lastError = $dbc->connect_errno.': '.$dbc->connect_error; + } else { + $this->dbh = $dbc; + if (empty($this->charset) === false) { + $dbc->set_charset($this->charset); + } + + $this->connected = true; + $this->lastError = null; + } + + } + + + /** + * Retrieve last error. + * + * @return string Error message. + */ + public function getLastError() + { + if ($this->lastError !== null) { + return $this->lastError; + } + + return ''; + } + + + /** + * Install PandoraFMS database schema in current target. + * + * @return boolean Installation is success or not. + */ + public function install() + { + if ($this->connect() !== true) { + return false; + } + + if ($this->installed === true) { + return true; + } + + $this->lastError = 'Pending installation'; + return false; + + } + + + /** + * Updates PandoraFMS database schema in current target. + * + * @return boolean Current installation is up to date. + */ + public function update() + { + if ($this->connect() !== true) { + return false; + } + + if ($this->install() !== true) { + return false; + } + + $this->lastError = 'Pending update'; + return false; + + } + + + /** + * Verifies current target database is connected, installed and updated. + * + * @return boolean Status of the installation. + */ + public function check() + { + if ($this->connect() !== true) { + return false; + } + + if ($this->install() !== true) { + return false; + } + + if ($this->update() !== true) { + return false; + } + + return true; + } + + +} diff --git a/pandora_console/include/lib/WSManager.php b/pandora_console/include/lib/Websockets/WSManager.php similarity index 98% rename from pandora_console/include/lib/WSManager.php rename to pandora_console/include/lib/Websockets/WSManager.php index f7ab3dbddc..a8d4226af7 100644 --- a/pandora_console/include/lib/WSManager.php +++ b/pandora_console/include/lib/Websockets/WSManager.php @@ -40,14 +40,12 @@ */ // Begin. -namespace PandoraFMS\WebSockets; +namespace PandoraFMS\Websockets; use \PandoraFMS\Websockets\WebSocketServer; -use \PandoraFMS\Websockets\WebSocketUser; use \PandoraFMS\User; - -require_once __DIR__.'/../functions.php'; +require_once __DIR__.'/../../functions.php'; /** * Redirects ws communication between two endpoints. @@ -212,7 +210,7 @@ class WSManager extends WebSocketServer */ public function readSocket($user) { - $buffer; + $buffer = ''; $numBytes = socket_recv( $user->socket, @@ -271,7 +269,7 @@ class WSManager extends WebSocketServer { global $config; - $match; + $match = []; $php_session_id = ''; \preg_match( '/PHPSESSID=(.*)/', diff --git a/pandora_console/include/lib/WebSocketServer.php b/pandora_console/include/lib/Websockets/WebSocketServer.php similarity index 100% rename from pandora_console/include/lib/WebSocketServer.php rename to pandora_console/include/lib/Websockets/WebSocketServer.php diff --git a/pandora_console/include/lib/WebSocketUser.php b/pandora_console/include/lib/Websockets/WebSocketUser.php similarity index 100% rename from pandora_console/include/lib/WebSocketUser.php rename to pandora_console/include/lib/Websockets/WebSocketUser.php diff --git a/pandora_console/vendor/composer/ClassLoader.php b/pandora_console/vendor/composer/ClassLoader.php index fce8549f07..1a58957d25 100644 --- a/pandora_console/vendor/composer/ClassLoader.php +++ b/pandora_console/vendor/composer/ClassLoader.php @@ -37,8 +37,8 @@ namespace Composer\Autoload; * * @author Fabien Potencier * @author Jordi Boggiano - * @see http://www.php-fig.org/psr/psr-0/ - * @see http://www.php-fig.org/psr/psr-4/ + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ */ class ClassLoader { @@ -60,7 +60,7 @@ class ClassLoader public function getPrefixes() { if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', $this->prefixesPsr0); + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); } return array(); diff --git a/pandora_console/vendor/composer/autoload_classmap.php b/pandora_console/vendor/composer/autoload_classmap.php index ef8c54358d..3cbf2a6065 100644 --- a/pandora_console/vendor/composer/autoload_classmap.php +++ b/pandora_console/vendor/composer/autoload_classmap.php @@ -6,6 +6,7 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'DeepCopy\\DeepCopy' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/DeepCopy.php', 'DeepCopy\\Exception\\CloneException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php', 'DeepCopy\\Exception\\PropertyException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php', @@ -44,7 +45,6 @@ return array( 'Egulias\\EmailValidator\\Exception\\DomainHyphened' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/DomainHyphened.php', 'Egulias\\EmailValidator\\Exception\\DotAtEnd' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/DotAtEnd.php', 'Egulias\\EmailValidator\\Exception\\DotAtStart' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/DotAtStart.php', - 'Egulias\\EmailValidator\\Exception\\ExpectedQPair' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php', 'Egulias\\EmailValidator\\Exception\\ExpectingAT' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ExpectingAT.php', 'Egulias\\EmailValidator\\Exception\\ExpectingATEXT' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ExpectingATEXT.php', 'Egulias\\EmailValidator\\Exception\\ExpectingCTEXT' => $vendorDir . '/egulias/email-validator/EmailValidator/Exception/ExpectingCTEXT.php', @@ -309,49 +309,20 @@ return array( 'Mpdf\\Utils\\PdfDate' => $vendorDir . '/mpdf/mpdf/src/Utils/PdfDate.php', 'Mpdf\\Utils\\UtfString' => $vendorDir . '/mpdf/mpdf/src/Utils/UtfString.php', 'PandoraFMS\\Agent' => $baseDir . '/include/lib/Agent.php', - 'PandoraFMS\\Dashboard\\AgentModuleWidget' => $baseDir . '/include/lib/Dashboard/Widgets/agent_module.php', - 'PandoraFMS\\Dashboard\\AlertsFiredWidget' => $baseDir . '/include/lib/Dashboard/Widgets/alerts_fired.php', 'PandoraFMS\\Dashboard\\Cell' => $baseDir . '/include/lib/Dashboard/Cell.php', - 'PandoraFMS\\Dashboard\\ClockWidget' => $baseDir . '/include/lib/Dashboard/Widgets/clock.php', - 'PandoraFMS\\Dashboard\\CustomGraphWidget' => $baseDir . '/include/lib/Dashboard/Widgets/custom_graph.php', - 'PandoraFMS\\Dashboard\\EventsListWidget' => $baseDir . '/include/lib/Dashboard/Widgets/events_list.php', - 'PandoraFMS\\Dashboard\\GraphModuleHistogramWidget' => $baseDir . '/include/lib/Dashboard/Widgets/graph_module_histogram.php', - 'PandoraFMS\\Dashboard\\GroupsStatusWidget' => $baseDir . '/include/lib/Dashboard/Widgets/groups_status.php', 'PandoraFMS\\Dashboard\\Manager' => $baseDir . '/include/lib/Dashboard/Manager.php', - 'PandoraFMS\\Dashboard\\MapsMadeByUser' => $baseDir . '/include/lib/Dashboard/Widgets/maps_made_by_user.php', - 'PandoraFMS\\Dashboard\\MapsStatusWidget' => $baseDir . '/include/lib/Dashboard/Widgets/maps_status.php', - 'PandoraFMS\\Dashboard\\ModuleIconWidget' => $baseDir . '/include/lib/Dashboard/Widgets/module_icon.php', - 'PandoraFMS\\Dashboard\\ModuleStatusWidget' => $baseDir . '/include/lib/Dashboard/Widgets/module_status.php', - 'PandoraFMS\\Dashboard\\ModuleTableValueWidget' => $baseDir . '/include/lib/Dashboard/Widgets/module_table_value.php', - 'PandoraFMS\\Dashboard\\ModuleValueWidget' => $baseDir . '/include/lib/Dashboard/Widgets/module_value.php', - 'PandoraFMS\\Dashboard\\MonitorHealthWidget' => $baseDir . '/include/lib/Dashboard/Widgets/monitor_health.php', - 'PandoraFMS\\Dashboard\\NetworkMapWidget' => $baseDir . '/include/lib/Dashboard/Widgets/network_map.php', - 'PandoraFMS\\Dashboard\\PostWidget' => $baseDir . '/include/lib/Dashboard/Widgets/post.php', - 'PandoraFMS\\Dashboard\\ReportsWidget' => $baseDir . '/include/lib/Dashboard/Widgets/reports.php', - 'PandoraFMS\\Dashboard\\SLAPercentWidget' => $baseDir . '/include/lib/Dashboard/Widgets/sla_percent.php', - 'PandoraFMS\\Dashboard\\ServiceMapWidget' => $baseDir . '/include/lib/Dashboard/Widgets/service_map.php', - 'PandoraFMS\\Dashboard\\SingleGraphWidget' => $baseDir . '/include/lib/Dashboard/Widgets/single_graph.php', - 'PandoraFMS\\Dashboard\\SystemGroupStatusWidget' => $baseDir . '/include/lib/Dashboard/Widgets/system_group_status.php', - 'PandoraFMS\\Dashboard\\TacticalWidget' => $baseDir . '/include/lib/Dashboard/Widgets/tactical.php', - 'PandoraFMS\\Dashboard\\TopNEventByGroupWidget' => $baseDir . '/include/lib/Dashboard/Widgets/top_n_events_by_group.php', - 'PandoraFMS\\Dashboard\\TopNEventByModuleWidget' => $baseDir . '/include/lib/Dashboard/Widgets/top_n_events_by_module.php', - 'PandoraFMS\\Dashboard\\TopNWidget' => $baseDir . '/include/lib/Dashboard/Widgets/top_n.php', - 'PandoraFMS\\Dashboard\\TreeViewWidget' => $baseDir . '/include/lib/Dashboard/Widgets/tree_view.php', - 'PandoraFMS\\Dashboard\\UrlWidget' => $baseDir . '/include/lib/Dashboard/Widgets/url.php', - 'PandoraFMS\\Dashboard\\WelcomeWidget' => $baseDir . '/include/lib/Dashboard/Widgets/example.php', 'PandoraFMS\\Dashboard\\Widget' => $baseDir . '/include/lib/Dashboard/Widget.php', - 'PandoraFMS\\Dashboard\\WuxStatsWidget' => $baseDir . '/include/lib/Dashboard/Widgets/wux_transaction_stats.php', - 'PandoraFMS\\Dashboard\\WuxWidget' => $baseDir . '/include/lib/Dashboard/Widgets/wux_transaction.php', 'PandoraFMS\\Entity' => $baseDir . '/include/lib/Entity.php', + 'PandoraFMS\\Event' => $baseDir . '/include/lib/Event.php', 'PandoraFMS\\Group' => $baseDir . '/include/lib/Group.php', 'PandoraFMS\\Module' => $baseDir . '/include/lib/Module.php', 'PandoraFMS\\ModuleStatus' => $baseDir . '/include/lib/ModuleStatus.php', 'PandoraFMS\\ModuleType' => $baseDir . '/include/lib/ModuleType.php', 'PandoraFMS\\User' => $baseDir . '/include/lib/User.php', 'PandoraFMS\\View' => $baseDir . '/include/lib/View.php', - 'PandoraFMS\\WebSockets\\WSManager' => $baseDir . '/include/lib/WSManager.php', - 'PandoraFMS\\Websockets\\WebSocketServer' => $baseDir . '/include/lib/WebSocketServer.php', - 'PandoraFMS\\Websockets\\WebSocketUser' => $baseDir . '/include/lib/WebSocketUser.php', + 'PandoraFMS\\Websockets\\WSManager' => $baseDir . '/include/lib/Websockets/WSManager.php', + 'PandoraFMS\\Websockets\\WebSocketServer' => $baseDir . '/include/lib/Websockets/WebSocketServer.php', + 'PandoraFMS\\Websockets\\WebSocketUser' => $baseDir . '/include/lib/Websockets/WebSocketUser.php', 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php', 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php', 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php', @@ -360,7 +331,6 @@ return array( 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php', 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php', 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php', - 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'fpdi_pdf_parser' => $vendorDir . '/setasign/fpdi/fpdi_pdf_parser.php', 'pdf_context' => $vendorDir . '/setasign/fpdi/pdf_context.php', diff --git a/pandora_console/vendor/composer/autoload_real.php b/pandora_console/vendor/composer/autoload_real.php index 8576380cc1..33d719ba60 100644 --- a/pandora_console/vendor/composer/autoload_real.php +++ b/pandora_console/vendor/composer/autoload_real.php @@ -22,13 +22,15 @@ class ComposerAutoloaderInitfdecadadce22e6dde51e9535fe4ad7aa return self::$loader; } + require __DIR__ . '/platform_check.php'; + spl_autoload_register(array('ComposerAutoloaderInitfdecadadce22e6dde51e9535fe4ad7aa', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); spl_autoload_unregister(array('ComposerAutoloaderInitfdecadadce22e6dde51e9535fe4ad7aa', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { - require_once __DIR__ . '/autoload_static.php'; + require __DIR__ . '/autoload_static.php'; call_user_func(\Composer\Autoload\ComposerStaticInitfdecadadce22e6dde51e9535fe4ad7aa::getInitializer($loader)); } else { diff --git a/pandora_console/vendor/composer/autoload_static.php b/pandora_console/vendor/composer/autoload_static.php index ee0f05a330..62260fc4b8 100644 --- a/pandora_console/vendor/composer/autoload_static.php +++ b/pandora_console/vendor/composer/autoload_static.php @@ -88,6 +88,7 @@ class ComposerStaticInitfdecadadce22e6dde51e9535fe4ad7aa ); public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'DeepCopy\\DeepCopy' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/DeepCopy.php', 'DeepCopy\\Exception\\CloneException' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php', 'DeepCopy\\Exception\\PropertyException' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php', @@ -126,7 +127,6 @@ class ComposerStaticInitfdecadadce22e6dde51e9535fe4ad7aa 'Egulias\\EmailValidator\\Exception\\DomainHyphened' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/DomainHyphened.php', 'Egulias\\EmailValidator\\Exception\\DotAtEnd' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/DotAtEnd.php', 'Egulias\\EmailValidator\\Exception\\DotAtStart' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/DotAtStart.php', - 'Egulias\\EmailValidator\\Exception\\ExpectedQPair' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ExpectingQPair.php', 'Egulias\\EmailValidator\\Exception\\ExpectingAT' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ExpectingAT.php', 'Egulias\\EmailValidator\\Exception\\ExpectingATEXT' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ExpectingATEXT.php', 'Egulias\\EmailValidator\\Exception\\ExpectingCTEXT' => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator/Exception/ExpectingCTEXT.php', @@ -391,49 +391,20 @@ class ComposerStaticInitfdecadadce22e6dde51e9535fe4ad7aa 'Mpdf\\Utils\\PdfDate' => __DIR__ . '/..' . '/mpdf/mpdf/src/Utils/PdfDate.php', 'Mpdf\\Utils\\UtfString' => __DIR__ . '/..' . '/mpdf/mpdf/src/Utils/UtfString.php', 'PandoraFMS\\Agent' => __DIR__ . '/../..' . '/include/lib/Agent.php', - 'PandoraFMS\\Dashboard\\AgentModuleWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/agent_module.php', - 'PandoraFMS\\Dashboard\\AlertsFiredWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/alerts_fired.php', 'PandoraFMS\\Dashboard\\Cell' => __DIR__ . '/../..' . '/include/lib/Dashboard/Cell.php', - 'PandoraFMS\\Dashboard\\ClockWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/clock.php', - 'PandoraFMS\\Dashboard\\CustomGraphWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/custom_graph.php', - 'PandoraFMS\\Dashboard\\EventsListWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/events_list.php', - 'PandoraFMS\\Dashboard\\GraphModuleHistogramWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/graph_module_histogram.php', - 'PandoraFMS\\Dashboard\\GroupsStatusWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/groups_status.php', 'PandoraFMS\\Dashboard\\Manager' => __DIR__ . '/../..' . '/include/lib/Dashboard/Manager.php', - 'PandoraFMS\\Dashboard\\MapsMadeByUser' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/maps_made_by_user.php', - 'PandoraFMS\\Dashboard\\MapsStatusWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/maps_status.php', - 'PandoraFMS\\Dashboard\\ModuleIconWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/module_icon.php', - 'PandoraFMS\\Dashboard\\ModuleStatusWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/module_status.php', - 'PandoraFMS\\Dashboard\\ModuleTableValueWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/module_table_value.php', - 'PandoraFMS\\Dashboard\\ModuleValueWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/module_value.php', - 'PandoraFMS\\Dashboard\\MonitorHealthWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/monitor_health.php', - 'PandoraFMS\\Dashboard\\NetworkMapWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/network_map.php', - 'PandoraFMS\\Dashboard\\PostWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/post.php', - 'PandoraFMS\\Dashboard\\ReportsWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/reports.php', - 'PandoraFMS\\Dashboard\\SLAPercentWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/sla_percent.php', - 'PandoraFMS\\Dashboard\\ServiceMapWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/service_map.php', - 'PandoraFMS\\Dashboard\\SingleGraphWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/single_graph.php', - 'PandoraFMS\\Dashboard\\SystemGroupStatusWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/system_group_status.php', - 'PandoraFMS\\Dashboard\\TacticalWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/tactical.php', - 'PandoraFMS\\Dashboard\\TopNEventByGroupWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/top_n_events_by_group.php', - 'PandoraFMS\\Dashboard\\TopNEventByModuleWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/top_n_events_by_module.php', - 'PandoraFMS\\Dashboard\\TopNWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/top_n.php', - 'PandoraFMS\\Dashboard\\TreeViewWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/tree_view.php', - 'PandoraFMS\\Dashboard\\UrlWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/url.php', - 'PandoraFMS\\Dashboard\\WelcomeWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/example.php', 'PandoraFMS\\Dashboard\\Widget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widget.php', - 'PandoraFMS\\Dashboard\\WuxStatsWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/wux_transaction_stats.php', - 'PandoraFMS\\Dashboard\\WuxWidget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widgets/wux_transaction.php', 'PandoraFMS\\Entity' => __DIR__ . '/../..' . '/include/lib/Entity.php', + 'PandoraFMS\\Event' => __DIR__ . '/../..' . '/include/lib/Event.php', 'PandoraFMS\\Group' => __DIR__ . '/../..' . '/include/lib/Group.php', 'PandoraFMS\\Module' => __DIR__ . '/../..' . '/include/lib/Module.php', 'PandoraFMS\\ModuleStatus' => __DIR__ . '/../..' . '/include/lib/ModuleStatus.php', 'PandoraFMS\\ModuleType' => __DIR__ . '/../..' . '/include/lib/ModuleType.php', 'PandoraFMS\\User' => __DIR__ . '/../..' . '/include/lib/User.php', 'PandoraFMS\\View' => __DIR__ . '/../..' . '/include/lib/View.php', - 'PandoraFMS\\WebSockets\\WSManager' => __DIR__ . '/../..' . '/include/lib/WSManager.php', - 'PandoraFMS\\Websockets\\WebSocketServer' => __DIR__ . '/../..' . '/include/lib/WebSocketServer.php', - 'PandoraFMS\\Websockets\\WebSocketUser' => __DIR__ . '/../..' . '/include/lib/WebSocketUser.php', + 'PandoraFMS\\Websockets\\WSManager' => __DIR__ . '/../..' . '/include/lib/Websockets/WSManager.php', + 'PandoraFMS\\Websockets\\WebSocketServer' => __DIR__ . '/../..' . '/include/lib/Websockets/WebSocketServer.php', + 'PandoraFMS\\Websockets\\WebSocketUser' => __DIR__ . '/../..' . '/include/lib/Websockets/WebSocketUser.php', 'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php', 'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php', 'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php', @@ -442,7 +413,6 @@ class ComposerStaticInitfdecadadce22e6dde51e9535fe4ad7aa 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php', 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php', 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php', - 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'fpdi_pdf_parser' => __DIR__ . '/..' . '/setasign/fpdi/fpdi_pdf_parser.php', 'pdf_context' => __DIR__ . '/..' . '/setasign/fpdi/pdf_context.php', diff --git a/pandora_console/vendor/composer/platform_check.php b/pandora_console/vendor/composer/platform_check.php new file mode 100644 index 0000000000..f79e574be7 --- /dev/null +++ b/pandora_console/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70000)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.0.0". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/pandora_console/ws.php b/pandora_console/ws.php index 0c9509720c..96148761b9 100644 --- a/pandora_console/ws.php +++ b/pandora_console/ws.php @@ -28,7 +28,7 @@ // Begin. require_once __DIR__.'/vendor/autoload.php'; -use \PandoraFMS\WebSockets\WSManager; +use \PandoraFMS\Websockets\WSManager; // Set to true to get full output. $debug = false; From 5799c3e19987a3029ef27a70a7a62cbfa057a6a3 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Mon, 25 Jan 2021 13:35:58 +0100 Subject: [PATCH 06/49] composer paths updated --- pandora_console/vendor/composer/autoload_classmap.php | 2 ++ pandora_console/vendor/composer/autoload_static.php | 2 ++ 2 files changed, 4 insertions(+) diff --git a/pandora_console/vendor/composer/autoload_classmap.php b/pandora_console/vendor/composer/autoload_classmap.php index 3cbf2a6065..4938966edb 100644 --- a/pandora_console/vendor/composer/autoload_classmap.php +++ b/pandora_console/vendor/composer/autoload_classmap.php @@ -309,6 +309,8 @@ return array( 'Mpdf\\Utils\\PdfDate' => $vendorDir . '/mpdf/mpdf/src/Utils/PdfDate.php', 'Mpdf\\Utils\\UtfString' => $vendorDir . '/mpdf/mpdf/src/Utils/UtfString.php', 'PandoraFMS\\Agent' => $baseDir . '/include/lib/Agent.php', + 'PandoraFMS\\Core\\Config' => $baseDir . '/include/lib/Core/Config.php', + 'PandoraFMS\\Core\\DBMantainer' => $baseDir . '/include/lib/Core/DBMantainer.php', 'PandoraFMS\\Dashboard\\Cell' => $baseDir . '/include/lib/Dashboard/Cell.php', 'PandoraFMS\\Dashboard\\Manager' => $baseDir . '/include/lib/Dashboard/Manager.php', 'PandoraFMS\\Dashboard\\Widget' => $baseDir . '/include/lib/Dashboard/Widget.php', diff --git a/pandora_console/vendor/composer/autoload_static.php b/pandora_console/vendor/composer/autoload_static.php index 62260fc4b8..dcc588664c 100644 --- a/pandora_console/vendor/composer/autoload_static.php +++ b/pandora_console/vendor/composer/autoload_static.php @@ -391,6 +391,8 @@ class ComposerStaticInitfdecadadce22e6dde51e9535fe4ad7aa 'Mpdf\\Utils\\PdfDate' => __DIR__ . '/..' . '/mpdf/mpdf/src/Utils/PdfDate.php', 'Mpdf\\Utils\\UtfString' => __DIR__ . '/..' . '/mpdf/mpdf/src/Utils/UtfString.php', 'PandoraFMS\\Agent' => __DIR__ . '/../..' . '/include/lib/Agent.php', + 'PandoraFMS\\Core\\Config' => __DIR__ . '/../..' . '/include/lib/Core/Config.php', + 'PandoraFMS\\Core\\DBMantainer' => __DIR__ . '/../..' . '/include/lib/Core/DBMantainer.php', 'PandoraFMS\\Dashboard\\Cell' => __DIR__ . '/../..' . '/include/lib/Dashboard/Cell.php', 'PandoraFMS\\Dashboard\\Manager' => __DIR__ . '/../..' . '/include/lib/Dashboard/Manager.php', 'PandoraFMS\\Dashboard\\Widget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widget.php', From 192a635599975cdb5b80ebbd54ef347dedcb5947 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Mon, 25 Jan 2021 19:29:22 +0100 Subject: [PATCH 07/49] WIP setup.hdb --- .../godmode/wizards/Wizard.main.php | 2 - pandora_console/include/functions_ui.php | 14 +- pandora_console/include/lib/Core/Config.php | 70 +++++-- .../include/lib/Core/DBMantainer.php | 194 +++++++++++++++++- pandora_console/include/styles/pandora.css | 4 + pandora_console/include/styles/setup.css | 5 + 6 files changed, 265 insertions(+), 24 deletions(-) create mode 100644 pandora_console/include/styles/setup.css diff --git a/pandora_console/godmode/wizards/Wizard.main.php b/pandora_console/godmode/wizards/Wizard.main.php index 6783ba20e1..3485dec627 100644 --- a/pandora_console/godmode/wizards/Wizard.main.php +++ b/pandora_console/godmode/wizards/Wizard.main.php @@ -32,8 +32,6 @@ global $config; require_once $config['homedir'].'/vendor/autoload.php'; require_once $config['homedir'].'/include/class/HTML.class.php'; -use \HTML; - /** * Global Wizard generic class. Needs to be inherited. * diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index cc72d93f5f..3ec6eec22c 100755 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -3935,7 +3935,19 @@ function ui_toggle( /** * Simplified way of ui_toggle ussage. * - * @param array $data Arguments. + * @param array $data Arguments: + * - content + * - name + * - title + * - id + * - hidden_default + * - return + * - toggle_class + * - container_class + * - main_class + * - img_a + * - img_b + * - clean. * * @return string HTML code with toggle content. */ diff --git a/pandora_console/include/lib/Core/Config.php b/pandora_console/include/lib/Core/Config.php index cda3581ed7..51b9f09c63 100644 --- a/pandora_console/include/lib/Core/Config.php +++ b/pandora_console/include/lib/Core/Config.php @@ -29,8 +29,8 @@ // Begin. namespace PandoraFMS\Core; -require_once __DIR__.'/../../include/config.php'; -require_once __DIR__.'/../../include/functions_config.php'; +require_once __DIR__.'/../../config.php'; +require_once __DIR__.'/../../functions_config.php'; /** * Config class to operate console configuration. @@ -38,21 +38,57 @@ require_once __DIR__.'/../../include/functions_config.php'; final class Config { + /** + * History database settings (tconfig). + * + * @var array + */ + private static $settings = []; + + + /** + * Load history database settings. + */ + private static function loadHistoryDBSettings() + { + if (self::$settings === null) { + $data = \db_get_all_rows_filter('tconfig', [], false, 'AND', true); + self::$settings = array_reduce( + $data, + function ($carry, $item) { + $carry[$item['token']] = $item['value']; + }, + [] + ); + } + } + /** * Retrieve configuration token. * - * @param string $token Token to retrieve. - * @param mixed $default Default value if not found. + * @param string $token Token to retrieve. + * @param mixed $default Default value if not found. + * @param boolean $history_db Search for token in history_db. * * @return mixed Configuration token. */ - public static function get(string $token, $default=null) - { - global $config; + public static function get( + string $token, + $default=null, + bool $history_db=false + ) { + if ($history_db === true) { + self::loadHistoryDBSettings(); + if (isset(self::$settings[$token]) === true) { + return self::$settings[$token]; + } + } else { + global $config; - if (isset($config[$token]) === true) { - return $config[$token]; + if (isset($config[$token]) === true) { + return $config[$token]; + } } return $default; @@ -63,15 +99,21 @@ final class Config /** * Set configuration token. * - * @param string $token Token to set. - * @param mixed $value Value to be. + * @param string $token Token to set. + * @param mixed $value Value to be. + * @param boolean $history_db Save to history_db settings. * * @return void */ - public static function set(string $token, $value) + public static function set(string $token, $value, bool $history_db=false) { - if (self::get($token) === null) { - config_update_value($token, $value); + if ($history_db !== false) { + if (self::get($token, null, $history_db) === null) { + } + } else { + if (self::get($token) === null) { + config_update_value($token, $value); + } } } diff --git a/pandora_console/include/lib/Core/DBMantainer.php b/pandora_console/include/lib/Core/DBMantainer.php index 1e8b6d80c3..d08a34bbd7 100644 --- a/pandora_console/include/lib/Core/DBMantainer.php +++ b/pandora_console/include/lib/Core/DBMantainer.php @@ -34,6 +34,12 @@ namespace PandoraFMS\Core; */ final class DBMantainer { + const ESSENTIAL_TABLES = [ + 'tagente_datos', + 'tagente_datos_string', + 'tevento', + 'tconfig', + ]; /** * Database user. @@ -105,6 +111,13 @@ final class DBMantainer */ private $lastError; + /** + * Connected to engine and database. + * + * @var boolean + */ + private $ready; + /** * Initialize DBMaintainer object. @@ -146,11 +159,11 @@ final class DBMantainer $this->host, $this->user, $this->pass, - $this->name, + null, $this->port ); - if ($dbc->connect_error === false) { + if ((bool) $dbc->connect_error === true) { $this->dbh = null; $this->connected = false; $this->lastError = $dbc->connect_errno.': '.$dbc->connect_error; @@ -160,10 +173,16 @@ final class DBMantainer $dbc->set_charset($this->charset); } - $this->connected = true; - $this->lastError = null; - } + if ($this->dbh->select_db($this->name) === false) { + $this->lastError = $this->dbh->errno.': '.$this->dbh->error; + $this->ready = false; + } else { + $this->lastError = null; + $this->ready = true; + } + $this->connected = true; + } } @@ -182,6 +201,100 @@ final class DBMantainer } + /** + * Retrieve all rows from given query in array format. + * + * @param string $query Query. + * + * @return array Results. + */ + private function getAllRows(string $query) + { + if ($this->ready !== true) { + $this->lastError = $this->dbh->errno.': '.$this->dbh->error; + return []; + } + + $rs = $this->dbh->query($query); + + $results = []; + + do { + $row = $rs->fetch_array(MYSQLI_ASSOC); + if ((bool) $row !== false) { + $results[] = $row; + } + } while ((bool) $row !== false); + + return $results; + } + + + /** + * Verifies schema against running db. + * + * @return boolean Success or not. + */ + public function verifySchema() + { + if ($this->ready !== true) { + return false; + } + + $missing_essential_tables = $this->verifyTables(); + + return !(bool) count($missing_essential_tables); + } + + + /** + * Verifies tables against running db. + * + * @return boolean Applied or not. + */ + public function verifyTables() + { + global $config; + + $t = \db_get_all_rows_sql( + sprintf( + 'SHOW TABLES FROM %s', + $config['dbname'] + ) + ); + + $tables = []; + foreach ($t as $v) { + $tables[] = array_shift($v); + } + + $t = $this->getAllRows( + sprintf( + 'SHOW TABLES FROM %s', + $this->name + ) + ); + $myTables = []; + foreach ($t as $k => $v) { + $myTables[] = array_shift($v); + } + + $differences = array_diff($tables, $myTables); + + if (count($differences) > 0) { + $this->lastError = sprintf( + 'Warning, following tables does not exist in target: %s', + join(', ', $differences) + ); + } + + // Exclude extension tables. + $differences = array_intersect($differences, self::ESSENTIAL_TABLES); + + return $differences; + } + + /** * Install PandoraFMS database schema in current target. * @@ -197,8 +310,33 @@ final class DBMantainer return true; } - $this->lastError = 'Pending installation'; - return false; + if ($this->ready !== true) { + // Not ready, create database in target. + $rc = $this->dbh->query( + sprintf( + 'CREATE DATABASE %s', + $this->name + ) + ); + + if ($rc === false) { + $this->lastError = $this->dbh->errno.': '.$this->dbh->error; + return false; + } + + if ($this->dbh->select_db($this->name) === false) { + $this->lastError = $this->dbh->errno.': '.$this->dbh->error; + return false; + } + + // Already connected and ready to execute commands. + $this->ready = true; + } else if ($this->verifySchema() === true) { + $this->installed = true; + return true; + } + + return $this->applyDump(Config::get('homedir', '').'/pandoradb.sql'); } @@ -247,4 +385,46 @@ final class DBMantainer } + /** + * This function keeps same functionality as install.php:parse_mysqli_dump. + * + * @param string $path Path where SQL dump file is stored. + * + * @return boolean Success or not. + */ + private function applyDump(string $path) + { + if (file_exists($path) === true) { + $file_content = file($path); + $query = ''; + foreach ($file_content as $sql_line) { + if (trim($sql_line) !== '' + && strpos($sql_line, '-- ') === false + ) { + $query .= $sql_line; + if ((bool) preg_match("/;[\040]*\$/", $sql_line) === true) { + $result = $this->dbh->query($query); + if ((bool) $result === false) { + $this->lastError = $this->dbh->errnum.': '; + $this->lastERror .= $this->dbh->error; + return false; + } + + $query = ''; + } + } + } + + return true; + } + + // File does not exist. + $this->lastError = sprintf( + 'File %s does not exist', + $path + ); + return false; + } + + } diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index f3a6959cba..a1b21bd24b 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -478,6 +478,10 @@ select:-internal-list-box { width: 290px; max-width: 290px; } +.w600px { + width: 600px; + max-width: 600px; +} .mw120px { min-width: 120px; } diff --git a/pandora_console/include/styles/setup.css b/pandora_console/include/styles/setup.css new file mode 100644 index 0000000000..331bc7aa2e --- /dev/null +++ b/pandora_console/include/styles/setup.css @@ -0,0 +1,5 @@ +span.subtitle { + font-size: 1.3em; + font-weight: normal; + font-family: "lato-bolder"; +} From c7706a6bfaaa8cbb33080af0208baeccca6ac8f7 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Wed, 27 Jan 2021 12:35:37 +0100 Subject: [PATCH 08/49] WIP Historical database manager (setup) --- pandora_console/godmode/setup/setup.php | 12 ++ pandora_console/include/functions_config.php | 114 ++++++++++++++++-- pandora_console/include/functions_ui.php | 59 ++++++--- pandora_console/include/lib/Core/Config.php | 84 +++++++++++-- .../{DBMantainer.php => DBMaintainer.php} | 2 +- pandora_console/include/styles/pandora.css | 2 +- pandora_console/include/styles/setup.css | 10 ++ .../vendor/composer/autoload_classmap.php | 2 +- .../vendor/composer/autoload_static.php | 2 +- 9 files changed, 237 insertions(+), 50 deletions(-) rename pandora_console/include/lib/Core/{DBMantainer.php => DBMaintainer.php} (99%) diff --git a/pandora_console/godmode/setup/setup.php b/pandora_console/godmode/setup/setup.php index e77d314f4c..d1df683325 100644 --- a/pandora_console/godmode/setup/setup.php +++ b/pandora_console/godmode/setup/setup.php @@ -248,6 +248,18 @@ if (isset($config['error_config_update_config'])) { ui_print_success_message(__('Correct update the setup options')); } + if (is_array($config['error_config_update_config']['errors']) === true) { + foreach ($config['error_config_update_config']['errors'] as $msg) { + ui_print_error_message($msg); + } + } + + if (is_array($config['error_config_update_config']['warnings']) === true) { + foreach ($config['error_config_update_config']['warnings'] as $msg) { + ui_print_warning_message($msg); + } + } + unset($config['error_config_update_config']); } diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php index b9b06fabc6..57058a59a0 100644 --- a/pandora_console/include/functions_config.php +++ b/pandora_console/include/functions_config.php @@ -26,7 +26,10 @@ * ============================================================================ */ - // Config functions. +// Config functions. +require_once __DIR__.'/../vendor/autoload.php'; +use PandoraFMS\Core\DBMaintainer; +use PandoraFMS\Core\Config; /** @@ -147,6 +150,8 @@ function config_update_config() } $error_update = []; + $errors = []; + $warnings = []; $sec2 = get_parameter('sec2'); @@ -1448,6 +1453,27 @@ function config_update_config() break; case 'hist_db': + if ($config['dbname'] == get_parameter('history_db_name') + && $config['dbport'] == get_parameter('history_db_port') + && $config['dbhost'] == io_input_password(get_parameter('history_db_host')) + ) { + // Same definition for active and historical database! + // This is a critical error. + $errors[] = __('Active and historical database cannot be the same.'); + } else { + if (!config_update_value('history_db_host', get_parameter('history_db_host'))) { + $error_update[] = __('Host'); + } + + if (!config_update_value('history_db_port', get_parameter('history_db_port'))) { + $error_update[] = __('Port'); + } + + if (!config_update_value('history_db_name', get_parameter('history_db_name'))) { + $error_update[] = __('Database name'); + } + } + if (!config_update_value('history_db_enabled', get_parameter('history_db_enabled'))) { $error_update[] = __('Enable history database'); } @@ -1456,18 +1482,6 @@ function config_update_config() $error_update[] = __('Enable history event'); } - if (!config_update_value('history_db_host', get_parameter('history_db_host'))) { - $error_update[] = __('Host'); - } - - if (!config_update_value('history_db_port', get_parameter('history_db_port'))) { - $error_update[] = __('Port'); - } - - if (!config_update_value('history_db_name', get_parameter('history_db_name'))) { - $error_update[] = __('Database name'); - } - if (!config_update_value('history_db_user', get_parameter('history_db_user'))) { $error_update[] = __('Database user'); } @@ -1507,6 +1521,72 @@ function config_update_config() ) { $error_update[] = __('Delay'); } + + if ((bool) $config['history_db_enabled'] === true) { + $dbm = new DBMaintainer( + [ + 'host' => $config['history_db_host'], + 'port' => $config['history_db_port'], + 'name' => $config['history_db_name'], + 'user' => $config['history_db_user'], + 'pass' => $config['history_db_pass'], + ] + ); + + // Performs several checks and installs if needed. + if ($dbm->check() === false) { + $errors[] = $dbm->getLastError(); + } + } + + // Historical configuration tokens (stored in historical db). + if (Config::set( + 'days_purge', + get_parameter('history_dbh_purge'), + true + ) !== true + ) { + $error_update[] = __('Historical database purge'); + } + + if (Config::set( + 'days_compact', + get_parameter('history_dbh_days_compact'), + true + ) !== true + ) { + $error_update[] = __('Historical database days compact'); + } + + if (Config::set( + 'step_compact', + get_parameter('history_dbh_step_compact'), + true + ) !== true + ) { + $error_update[] = __('Historical database step compact'); + } + + if (Config::set( + 'event_purge', + get_parameter('history_dbh_events_purge'), + true + ) !== true + ) { + $error_update[] = __('Historical database events purge'); + } + + if (Config::set( + 'string_purge', + get_parameter('history_dbh_string_purge'), + true + ) !== true + ) { + $error_update[] = __('Historical database string purge'); + } + + // Disable history db in history db. + Config::set('history_db_enabled', 0, true); break; case 'ehorus': @@ -1675,6 +1755,14 @@ function config_update_config() $config['error_config_update_config']['correct'] = true; } + if (count($errors) > 0) { + $config['error_config_update_config']['errors'] = $errors; + } + + if (count($warnings) > 0) { + $config['error_config_update_config']['warnings'] = $warnings; + } + enterprise_include_once('include/functions_policies.php'); $enterprise = enterprise_include_once('include/functions_skins.php'); if ($enterprise !== ENTERPRISE_NOT_HOOK) { diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index 3ec6eec22c..5b57d81870 100755 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -3747,18 +3747,22 @@ function ui_print_event_priority( /** * Print a code into a DIV and enable a toggle to show and hide it. * - * @param string $code Html code. - * @param string $name Name of the link. - * @param string $title Title of the link. - * @param string $id Block id. - * @param boolean $hidden_default If the div will be hidden by default (default: true). - * @param boolean $return Whether to return an output string or echo now (default: true). - * @param string $toggle_class Toggle class. - * @param string $container_class Container class. - * @param string $main_class Main object class. - * @param string $img_a Image (closed). - * @param string $img_b Image (opened). - * @param string $clean Do not encapsulate with class boxes, clean print. + * @param string $code Html code. + * @param string $name Name of the link. + * @param string $title Title of the link. + * @param string $id Block id. + * @param boolean $hidden_default If the div will be hidden by default (default: true). + * @param boolean $return Whether to return an output string or echo now (default: true). + * @param string $toggle_class Toggle class. + * @param string $container_class Container class. + * @param string $main_class Main object class. + * @param string $img_a Image (closed). + * @param string $img_b Image (opened). + * @param string $clean Do not encapsulate with class boxes, clean print. + * @param boolean $reverseImg Reverse image. + * @param boolean $swtich Use switch input instead image. + * @param string $attributes_switch Switch attributes (class...). + * @param string|null $switch_name Use custom switch input name or generate one. * * @return string HTML. */ @@ -3777,7 +3781,8 @@ function ui_toggle( $clean=false, $reverseImg=false, $switch=false, - $attributes_switch='' + $attributes_switch='', + $switch_name=null ) { // Generate unique Id. $uniqid = uniqid(''); @@ -3813,7 +3818,9 @@ function ui_toggle( $main_class = ''; } - $container_class = 'white-box-content-clean'; + if ($container_class == 'white-box-content') { + $container_class = 'white-box-content-clean'; + } } // Link to toggle. @@ -3821,11 +3828,15 @@ function ui_toggle( $output .= '
'; if ($reverseImg === false) { if ($switch === true) { + if (empty($switch_name) === true) { + $switch_name = 'box_enable_toggle'.$uniqid; + } + $output .= html_print_div( [ 'class' => 'float-left', 'content' => html_print_checkbox_switch_extended( - 'box_enable_toggle'.$uniqid, + $switch_name, 1, ($hidden_default === true) ? 0 : 1, false, @@ -3895,7 +3906,7 @@ function ui_toggle( $output .= ' var hide_tgl_ctrl_'.$uniqid.' = '.(int) $hidden_default.";\n"; $output .= ' /* $vendorDir . '/mpdf/mpdf/src/Utils/UtfString.php', 'PandoraFMS\\Agent' => $baseDir . '/include/lib/Agent.php', 'PandoraFMS\\Core\\Config' => $baseDir . '/include/lib/Core/Config.php', - 'PandoraFMS\\Core\\DBMantainer' => $baseDir . '/include/lib/Core/DBMantainer.php', + 'PandoraFMS\\Core\\DBMaintainer' => $baseDir . '/include/lib/Core/DBMaintainer.php', 'PandoraFMS\\Dashboard\\Cell' => $baseDir . '/include/lib/Dashboard/Cell.php', 'PandoraFMS\\Dashboard\\Manager' => $baseDir . '/include/lib/Dashboard/Manager.php', 'PandoraFMS\\Dashboard\\Widget' => $baseDir . '/include/lib/Dashboard/Widget.php', diff --git a/pandora_console/vendor/composer/autoload_static.php b/pandora_console/vendor/composer/autoload_static.php index dcc588664c..e1953333f9 100644 --- a/pandora_console/vendor/composer/autoload_static.php +++ b/pandora_console/vendor/composer/autoload_static.php @@ -392,7 +392,7 @@ class ComposerStaticInitfdecadadce22e6dde51e9535fe4ad7aa 'Mpdf\\Utils\\UtfString' => __DIR__ . '/..' . '/mpdf/mpdf/src/Utils/UtfString.php', 'PandoraFMS\\Agent' => __DIR__ . '/../..' . '/include/lib/Agent.php', 'PandoraFMS\\Core\\Config' => __DIR__ . '/../..' . '/include/lib/Core/Config.php', - 'PandoraFMS\\Core\\DBMantainer' => __DIR__ . '/../..' . '/include/lib/Core/DBMantainer.php', + 'PandoraFMS\\Core\\DBMaintainer' => __DIR__ . '/../..' . '/include/lib/Core/DBMaintainer.php', 'PandoraFMS\\Dashboard\\Cell' => __DIR__ . '/../..' . '/include/lib/Dashboard/Cell.php', 'PandoraFMS\\Dashboard\\Manager' => __DIR__ . '/../..' . '/include/lib/Dashboard/Manager.php', 'PandoraFMS\\Dashboard\\Widget' => __DIR__ . '/../..' . '/include/lib/Dashboard/Widget.php', From bcb2447edb2a9798a99fad407ecc22fb76a7c253 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Wed, 27 Jan 2021 13:03:57 +0100 Subject: [PATCH 09/49] WIP Historical database manager (setup) --- pandora_console/godmode/setup/performance.php | 48 ++++--------------- 1 file changed, 9 insertions(+), 39 deletions(-) diff --git a/pandora_console/godmode/setup/performance.php b/pandora_console/godmode/setup/performance.php index 366d55d4d9..14e376415c 100644 --- a/pandora_console/godmode/setup/performance.php +++ b/pandora_console/godmode/setup/performance.php @@ -29,7 +29,10 @@ // Load global vars. global $config; -require_once 'include/config.php'; +require_once $config['homedir'].'/include/config.php'; +require_once $config['homedir'].'/vendor/autoload.php'; + +use PandoraFMS\Core\Config; check_login(); @@ -388,44 +391,11 @@ if ($config['history_db_enabled'] == 1) { ); } - $config_history = false; - if ($config['history_db_connection']) { - $history_connect = mysql_db_process_sql( - 'DESCRIBE tconfig', - 'affected_rows', - $config['history_db_connection'], - false - ); - - if ($history_connect !== false) { - $config_history_array = mysql_db_process_sql( - 'SELECT * FROM tconfig', - 'affected_rows', - $config['history_db_connection'], - false - ); - - if (isset($config_history_array) && is_array($config_history_array)) { - foreach ($config_history_array as $key => $value) { - $config_history[$value['token']] = $value['value']; - $config_history = true; - } - } - } else { - echo ui_print_error_message( - __('The tconfig table does not exist in the historical database') - ); - } - } - - if ($config_history === false) { - $config_history = []; - $config_history['days_purge'] = 180; - $config_history['days_compact'] = 120; - $config_history['step_compact'] = 1; - $config_history['event_purge'] = 180; - $config_history['string_purge'] = 180; - } + $config_history['days_purge'] = Config::get('days_purge', 180, true); + $config_history['days_compact'] = Config::get('days_compact', 120, true); + $config_history['step_compact'] = Config::get('step_compact', 1, true); + $config_history['event_purge'] = Config::get('event_purge', 180, true); + $config_history['string_purge'] = Config::get('string_purge', 180, true); $table_historical = new StdClass(); $table_historical->width = '100%'; From bbab6d9fe1dfc52b1cc575be066c8129f7e481c2 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Wed, 27 Jan 2021 14:06:22 +0100 Subject: [PATCH 10/49] WIP update process --- .../include/lib/Core/DBMaintainer.php | 63 ++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/pandora_console/include/lib/Core/DBMaintainer.php b/pandora_console/include/lib/Core/DBMaintainer.php index 2193f74421..a8c5fbc7b9 100644 --- a/pandora_console/include/lib/Core/DBMaintainer.php +++ b/pandora_console/include/lib/Core/DBMaintainer.php @@ -230,6 +230,62 @@ final class DBMaintainer } + /** + * Return first row available for given query. + * + * @param string $query Query to retrieve (1 row only). + * + * @return array Row. + */ + private function getRow(string $query) + { + if ($this->ready !== true) { + $this->lastError = $this->dbh->errno.': '.$this->dbh->error; + return []; + } + + $query .= ' LIMIT 1'; + $rs = $this->dbh->query($query); + if ($rs !== false) { + return $rs->fetch_array(MYSQLI_ASSOC); + } + + // Error. + return false; + } + + + /** + * Retrieve value from given query. + * + * @param string $table Table to query. + * @param string $key Field to retrieve. + * @param array $filter Filters to apply. + * @param string $join AND by default. + * + * @return mixed|null Value retrieved or null if not found. + */ + private function getValue( + string $table, + string $key, + array $filter, + string $join='AND' + ) { + $query = sprintf( + 'SELECT %s FROM %s WHERE 1=1 %s', + $key, + $table, + \db_format_array_where_clause_sql($filter, $join) + ); + $result = $this->getRow($query); + if ($result !== false) { + return $result[$key]; + } + + return false; + } + + /** * Verifies schema against running db. * @@ -356,9 +412,14 @@ final class DBMaintainer return false; } + $last_mr = Config::get('MR', null); + $last_mr_curr = $this->getValue('tconfig', 'value', ['token' => 'MR']); + + hd($last_mr); + hd($last_mr_curr); + $this->lastError = 'Pending update'; return false; - } From 25b15182e35a9ce4d144177d86f89d2331eda80f Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Wed, 27 Jan 2021 15:48:00 +0100 Subject: [PATCH 11/49] DBH auto-updater --- .../include/lib/Core/DBMaintainer.php | 107 ++++++++++++++++-- 1 file changed, 98 insertions(+), 9 deletions(-) diff --git a/pandora_console/include/lib/Core/DBMaintainer.php b/pandora_console/include/lib/Core/DBMaintainer.php index a8c5fbc7b9..db7aaa3670 100644 --- a/pandora_console/include/lib/Core/DBMaintainer.php +++ b/pandora_console/include/lib/Core/DBMaintainer.php @@ -272,7 +272,7 @@ final class DBMaintainer string $join='AND' ) { $query = sprintf( - 'SELECT %s FROM %s WHERE 1=1 %s', + 'SELECT %s FROM %s WHERE %s', $key, $table, \db_format_array_where_clause_sql($filter, $join) @@ -351,6 +351,45 @@ final class DBMaintainer } + /** + * Updates or creates a token in remote tconfig. + * + * @param string $token Token to be set. + * @param mixed $value Value for given token. + * + * @return boolean Success or not. + */ + private function setConfigToken(string $token, $value) + { + $prev = $this->getValue('tconfig', 'value', ['token' => $token]); + // If failed or not found, then insert. + if ($prev === false || $prev === null) { + // Create. + $rs = $this->dbh->query( + sprintf( + 'INSERT INTO `tconfig` (`token`, `value`) + VALUES ("%s", "%s")', + $token, + $value + ) + ); + } else { + // Update. + $rs = $this->dbh->query( + sprintf( + 'UPDATE `tconfig` + SET `value`= "%s" + WHERE `token` = "%s"', + $value, + $token + ) + ); + } + + return ($rs !== false); + } + + /** * Install PandoraFMS database schema in current target. * @@ -392,7 +431,19 @@ final class DBMaintainer return true; } - return $this->applyDump(Config::get('homedir', '').'/pandoradb.sql'); + $result = $this->applyDump(Config::get('homedir', '').'/pandoradb.sql'); + + // Set MR version according pandoradb_data. + $data_content = file_get_contents( + Config::get('homedir', '').'/pandoradb_data.sql' + ); + if (preg_match('/\(\'MR\'\,\s*(\d+)\)/', $data_content, $matches) > 0) { + $target_mr = $matches[1]; + } + + $cnf_update = $this->setConfigToken('MR', (int) $target_mr); + + return $result && $cnf_update; } @@ -412,13 +463,51 @@ final class DBMaintainer return false; } - $last_mr = Config::get('MR', null); - $last_mr_curr = $this->getValue('tconfig', 'value', ['token' => 'MR']); + $last_mr = (int) Config::get('MR', null); + $last_mr_curr = (int) $this->getValue( + 'tconfig', + 'value', + ['token' => 'MR'] + ); - hd($last_mr); - hd($last_mr_curr); + if ($last_mr_curr < $last_mr) { + while ($last_mr_curr < $last_mr) { + $last_mr_curr++; - $this->lastError = 'Pending update'; + $path = Config::get('homedir', ''); + $file = sprintf('/extras/mr/%d.sql', $last_mr_curr); + $updated_file = sprintf( + '/extras/mr/updated/%d.sql', + $last_mr_curr + ); + + $filename = $path.$file; + if (file_exists($path.$file) !== true) { + // File does not exist, maybe already udpated in active DB? + $filename = $path.$updated_file; + if (file_exists($filename) !== false) { + $this->lastError = 'Unable to locate MR update #'; + $this->lastError .= $last_mr_curr; + return false; + } + } + + if ($this->applyDump($filename) !== true) { + $err = 'Unable to apply MR update #'; + $err .= $last_mr_curr.': '; + $this->lastError = $err.$this->lastError; + return false; + } + } + } + + if ($last_mr_curr === $last_mr) { + $this->setConfigToken('MR', $last_mr_curr); + + return true; + } + + $this->lastError = 'Unknown database schema version, check MR in both active and historical database'; return false; } @@ -466,8 +555,8 @@ final class DBMaintainer if ((bool) preg_match("/;[\040]*\$/", $sql_line) === true) { $result = $this->dbh->query($query); if ((bool) $result === false) { - $this->lastError = $this->dbh->errnum.': '; - $this->lastERror .= $this->dbh->error; + $this->lastError = $this->dbh->errno.': '; + $this->lastError .= $this->dbh->error; return false; } From dd4849f7c355f805f53abe02bbf8f91c2d8ca625 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Wed, 27 Jan 2021 19:23:31 +0100 Subject: [PATCH 12/49] WIP Scheduled install & update of history database processes --- .../include/class/ConsoleSupervisor.php | 3 +- .../include/lib/Core/DBMaintainer.php | 106 ++++++++++++++++-- 2 files changed, 100 insertions(+), 9 deletions(-) diff --git a/pandora_console/include/class/ConsoleSupervisor.php b/pandora_console/include/class/ConsoleSupervisor.php index cc52f2062f..558aebde8d 100644 --- a/pandora_console/include/class/ConsoleSupervisor.php +++ b/pandora_console/include/class/ConsoleSupervisor.php @@ -149,7 +149,8 @@ class ConsoleSupervisor */ public function runBasic() { - global $config; + // Ensure functions are installed and up to date. + enterprise_hook('cron_extension_install_functions'); /* * PHP configuration warnings: diff --git a/pandora_console/include/lib/Core/DBMaintainer.php b/pandora_console/include/lib/Core/DBMaintainer.php index db7aaa3670..cf7b78abdb 100644 --- a/pandora_console/include/lib/Core/DBMaintainer.php +++ b/pandora_console/include/lib/Core/DBMaintainer.php @@ -393,9 +393,11 @@ final class DBMaintainer /** * Install PandoraFMS database schema in current target. * + * @param boolean $check_only Check and return, do not perform actions. + * * @return boolean Installation is success or not. */ - public function install() + public function install(bool $check_only=false) { if ($this->connect() !== true) { return false; @@ -407,6 +409,11 @@ final class DBMaintainer if ($this->ready !== true) { // Not ready, create database in target. + if ($check_only === true) { + $this->lastError = 'Database does not exist in target'; + return false; + } + $rc = $this->dbh->query( sprintf( 'CREATE DATABASE %s', @@ -428,9 +435,15 @@ final class DBMaintainer $this->ready = true; } else if ($this->verifySchema() === true) { $this->installed = true; + $this->lastError = null; return true; } + if ($check_only === true) { + $this->lastError = 'Schema not applied in target'; + return false; + } + $result = $this->applyDump(Config::get('homedir', '').'/pandoradb.sql'); // Set MR version according pandoradb_data. @@ -451,9 +464,11 @@ final class DBMaintainer /** * Updates PandoraFMS database schema in current target. * + * @param boolean $check_only Perform only test without update. + * * @return boolean Current installation is up to date. */ - public function update() + public function update(bool $check_only=false) { if ($this->connect() !== true) { return false; @@ -463,15 +478,43 @@ final class DBMaintainer return false; } - $last_mr = (int) Config::get('MR', null); + // Set MR version according pandoradb_data. + $data_content = file_get_contents( + Config::get('homedir', '').'/pandoradb_data.sql' + ); + if (preg_match('/\(\'MR\'\,\s*(\d+)\)/', $data_content, $matches) > 0) { + $target_mr = $matches[1]; + } + + $active_mr = (int) Config::get('MR', null); $last_mr_curr = (int) $this->getValue( 'tconfig', 'value', ['token' => 'MR'] ); - if ($last_mr_curr < $last_mr) { - while ($last_mr_curr < $last_mr) { + if ($check_only === true) { + if ($active_mr === $last_mr_curr) { + return true; + } + + $this->lastError = sprintf( + 'Database schema not up to date: #%d should be #%d', + $last_mr_curr, + $active_mr + ); + if ($active_mr < $target_mr) { + $this->lastError .= sprintf( + ' (latest available: #%d)', + $target_mr + ); + } + + return false; + } + + if ($last_mr_curr < $active_mr) { + while ($last_mr_curr < $active_mr) { $last_mr_curr++; $path = Config::get('homedir', ''); @@ -501,7 +544,7 @@ final class DBMaintainer } } - if ($last_mr_curr === $last_mr) { + if ($last_mr_curr === $active_mr) { $this->setConfigToken('MR', $last_mr_curr); return true; @@ -513,11 +556,12 @@ final class DBMaintainer /** - * Verifies current target database is connected, installed and updated. + * Process database checks perform required actions. + * Returns true if it is connected, installed and updated. * * @return boolean Status of the installation. */ - public function check() + public function process() { if ($this->connect() !== true) { return false; @@ -535,6 +579,52 @@ final class DBMaintainer } + /** + * Check if target has schema updated. + * + * @return boolean + */ + public function isUpdated() + { + return $this->update(true); + } + + + /** + * Check if target has schema installed. + * + * @return boolean + */ + public function isInstalled() + { + return $this->install(true); + } + + + /** + * Checks if current target is connected, installed and updated. + * + * @return boolean Status of the database schema. + */ + public function check() + { + if ($this->connect() !== true) { + return false; + } + + if ($this->isInstalled() !== true) { + return false; + } + + if ($this->isUpdated() !== true) { + return false; + } + + return true; + + } + + /** * This function keeps same functionality as install.php:parse_mysqli_dump. * From 9fc3856f835a676e7cd515c234afb00bff13591d Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Thu, 28 Jan 2021 13:20:36 +0100 Subject: [PATCH 13/49] WIP historical database automaintenance + minor fixes --- .../include/class/HelpFeedBack.class.php | 1 + pandora_console/include/config_process.php | 2 +- pandora_console/include/functions_config.php | 9 +++- pandora_console/include/lib/Core/Config.php | 6 +++ .../include/lib/Core/DBMaintainer.php | 52 +++++++++++++------ 5 files changed, 51 insertions(+), 19 deletions(-) diff --git a/pandora_console/include/class/HelpFeedBack.class.php b/pandora_console/include/class/HelpFeedBack.class.php index 77b54794ab..9c99fcf9db 100644 --- a/pandora_console/include/class/HelpFeedBack.class.php +++ b/pandora_console/include/class/HelpFeedBack.class.php @@ -236,6 +236,7 @@ class HelpFeedBack extends Wizard */ public function sendMailMethod() { + global $config; $suggestion = get_parameter('type', 'false'); $feedback_text = get_parameter('feedback_text', null); $feedback_mail = get_parameter('feedback_email', null); diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 20ef0ffd12..093cfa0286 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -101,7 +101,7 @@ require_once $ownDir.'functions.php'; // We need a timezone BEFORE calling config_process_config. // If not we will get ugly warnings. Set Europe/Madrid by default // Later will be replaced by the good one. -if (!is_dir($_SERVER['DOCUMENT_ROOT'].$config['homeurl']) || !is_dir($_SERVER['DOCUMENT_ROOT'].$config['homeurl_static'])) { +if (!is_dir($config['homedir'])) { $url = explode('/', $_SERVER['REQUEST_URI']); $flag_url = 0; foreach ($url as $key => $value) { diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php index 57058a59a0..97cb856511 100644 --- a/pandora_console/include/functions_config.php +++ b/pandora_console/include/functions_config.php @@ -28,6 +28,8 @@ // Config functions. require_once __DIR__.'/../vendor/autoload.php'; +require_once __DIR__.'/functions.php'; +enterprise_include_once('include/functions_config.php'); use PandoraFMS\Core\DBMaintainer; use PandoraFMS\Core\Config; @@ -1534,7 +1536,12 @@ function config_update_config() ); // Performs several checks and installs if needed. - if ($dbm->check() === false) { + if ($dbm->checkDatabaseDefinition() === true + && $dbm->isInstalled() === false + ) { + // Target is ready but several tasks are pending. + $dbm->process(); + } else if ($dbm->check() !== true) { $errors[] = $dbm->getLastError(); } } diff --git a/pandora_console/include/lib/Core/Config.php b/pandora_console/include/lib/Core/Config.php index fe73fe327d..4891cabcce 100644 --- a/pandora_console/include/lib/Core/Config.php +++ b/pandora_console/include/lib/Core/Config.php @@ -75,12 +75,18 @@ final class Config ob_get_clean(); } + ob_start(); $data = \db_get_all_rows_sql( 'SELECT * FROM `tconfig`', false, false, $config['history_db_connection'] ); + ob_get_clean(); + + if (is_array($data) !== true) { + return []; + } self::$settings = array_reduce( $data, diff --git a/pandora_console/include/lib/Core/DBMaintainer.php b/pandora_console/include/lib/Core/DBMaintainer.php index cf7b78abdb..b53311581c 100644 --- a/pandora_console/include/lib/Core/DBMaintainer.php +++ b/pandora_console/include/lib/Core/DBMaintainer.php @@ -390,6 +390,40 @@ final class DBMaintainer } + /** + * Create database only (not schema) in target. + * + * @return boolean Success or not. + */ + public function checkDatabaseDefinition() + { + if ($this->ready === true) { + return true; + } + + $rc = $this->dbh->query( + sprintf( + 'CREATE DATABASE %s', + $this->name + ) + ); + + if ($rc === false) { + $this->lastError = $this->dbh->errno.': '.$this->dbh->error; + return false; + } + + if ($this->dbh->select_db($this->name) === false) { + $this->lastError = $this->dbh->errno.': '.$this->dbh->error; + return false; + } + + // Already connected and ready to execute commands. + $this->ready = true; + return true; + } + + /** * Install PandoraFMS database schema in current target. * @@ -414,25 +448,9 @@ final class DBMaintainer return false; } - $rc = $this->dbh->query( - sprintf( - 'CREATE DATABASE %s', - $this->name - ) - ); - - if ($rc === false) { - $this->lastError = $this->dbh->errno.': '.$this->dbh->error; + if ($this->checkDatabaseDefinition() === false) { return false; } - - if ($this->dbh->select_db($this->name) === false) { - $this->lastError = $this->dbh->errno.': '.$this->dbh->error; - return false; - } - - // Already connected and ready to execute commands. - $this->ready = true; } else if ($this->verifySchema() === true) { $this->installed = true; $this->lastError = null; From b8980c189c2434e9c3c67ff4dd62d56b47b3ce8c Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Thu, 28 Jan 2021 18:50:55 +0100 Subject: [PATCH 14/49] Schedule history db schema check after MR update --- pandora_console/include/ajax/rolling_release.ajax.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pandora_console/include/ajax/rolling_release.ajax.php b/pandora_console/include/ajax/rolling_release.ajax.php index 43ceaa5f1d..194123aaac 100644 --- a/pandora_console/include/ajax/rolling_release.ajax.php +++ b/pandora_console/include/ajax/rolling_release.ajax.php @@ -88,6 +88,11 @@ if (is_ajax()) { $file_dest = $config['homedir']."/extras/mr/updated/$number.sql"; copy($file, $file_dest); + + // After successfully update, schedule history + // database upgrade. + enterprise_include_once('include/functions_config.php'); + enterprise_hook('history_db_install'); } } else { $error_file = fopen($config['homedir'].'/extras/mr/error.txt', 'w'); From 279bd5456d5ee44b7b865d07b491ac339fbe43cc Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Fri, 29 Jan 2021 10:25:14 +0100 Subject: [PATCH 15/49] Disabled compactdb while running in historical database --- pandora_server/util/pandora_db.pl | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 874c8bd758..27db50c38b 100755 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -1021,8 +1021,8 @@ sub pandora_delete_old_session_data { ############################################################################### # Main ############################################################################### -sub pandoradb_main ($$$) { - my ($conf, $dbh, $history_dbh) = @_; +sub pandoradb_main ($$$;$) { + my ($conf, $dbh, $history_dbh, $running_in_history) = @_; log_message ('', "Starting at ". strftime ("%Y-%m-%d %H:%M:%S", localtime()) . "\n"); @@ -1043,8 +1043,12 @@ sub pandoradb_main ($$$) { } } + # Only active database should be compacted. Disabled for historical database. # Compact on if enable and DaysCompact are below DaysPurge - if (($conf->{'_onlypurge'} == 0) && ($conf->{'_days_compact'} < $conf->{'_days_purge'})) { + if (!$running_in_history + && ($conf->{'_onlypurge'} == 0) + && ($conf->{'_days_compact'} < $conf->{'_days_purge'}) + ) { pandora_compactdb ($conf, defined ($history_dbh) ? $history_dbh : $dbh, $dbh); } @@ -1126,7 +1130,8 @@ if (defined($history_dbh)) { pandoradb_main( $h_conf, $history_dbh, - undef + undef, + 1 # Disable certain funcionality while runningn in historical database. ); } From 04be237b7af78aa82f17a26b111197ebd75d6be1 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Fri, 29 Jan 2021 14:30:16 +0100 Subject: [PATCH 16/49] minor method added --- pandora_console/include/lib/Core/DBMaintainer.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pandora_console/include/lib/Core/DBMaintainer.php b/pandora_console/include/lib/Core/DBMaintainer.php index b53311581c..685ca1b126 100644 --- a/pandora_console/include/lib/Core/DBMaintainer.php +++ b/pandora_console/include/lib/Core/DBMaintainer.php @@ -186,6 +186,17 @@ final class DBMaintainer } + /** + * Return connection statuis. + * + * @return boolean + */ + public function isConnected() + { + return $this->connected; + } + + /** * Retrieve last error. * From 96c218f21ee1f6bb92a29bb35e62b1d9877b10b8 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Mon, 1 Feb 2021 13:31:42 +0100 Subject: [PATCH 17/49] Some updates and minor fixes DBMaintainer --- pandora_console/include/lib/Core/Config.php | 21 ++--- .../include/lib/Core/DBMaintainer.php | 81 +++++++++++++------ pandora_console/include/styles/pandora.css | 5 ++ pandora_console/include/styles/setup.css | 4 + 4 files changed, 77 insertions(+), 34 deletions(-) diff --git a/pandora_console/include/lib/Core/Config.php b/pandora_console/include/lib/Core/Config.php index 4891cabcce..620c63f84a 100644 --- a/pandora_console/include/lib/Core/Config.php +++ b/pandora_console/include/lib/Core/Config.php @@ -72,18 +72,19 @@ final class Config $config['history_db_port'], false ); + + if ($config['history_db_connection'] !== false) { + $data = \db_get_all_rows_sql( + 'SELECT * FROM `tconfig`', + false, + false, + $config['history_db_connection'] + ); + } + ob_get_clean(); } - ob_start(); - $data = \db_get_all_rows_sql( - 'SELECT * FROM `tconfig`', - false, - false, - $config['history_db_connection'] - ); - ob_get_clean(); - if (is_array($data) !== true) { return []; } @@ -119,6 +120,8 @@ final class Config if (isset(self::$settings[$token]) === true) { return self::$settings[$token]; } + + return $default; } else { global $config; diff --git a/pandora_console/include/lib/Core/DBMaintainer.php b/pandora_console/include/lib/Core/DBMaintainer.php index 685ca1b126..8b3fc75bab 100644 --- a/pandora_console/include/lib/Core/DBMaintainer.php +++ b/pandora_console/include/lib/Core/DBMaintainer.php @@ -230,12 +230,14 @@ final class DBMaintainer $results = []; - do { - $row = $rs->fetch_array(MYSQLI_ASSOC); - if ((bool) $row !== false) { - $results[] = $row; - } - } while ((bool) $row !== false); + if ($rs !== false) { + do { + $row = $rs->fetch_array(MYSQLI_ASSOC); + if ((bool) $row !== false) { + $results[] = $row; + } + } while ((bool) $row !== false); + } return $results; } @@ -412,6 +414,10 @@ final class DBMaintainer return true; } + if ($this->dbh === null) { + return false; + } + $rc = $this->dbh->query( sprintf( 'CREATE DATABASE %s', @@ -503,7 +509,7 @@ final class DBMaintainer return false; } - if ($this->install() !== true) { + if ($this->install($check_only) !== true) { return false; } @@ -564,7 +570,7 @@ final class DBMaintainer } } - if ($this->applyDump($filename) !== true) { + if ($this->applyDump($filename, true) !== true) { $err = 'Unable to apply MR update #'; $err .= $last_mr_curr.': '; $this->lastError = $err.$this->lastError; @@ -630,6 +636,23 @@ final class DBMaintainer } + /** + * Checks if target is ready to connect. + * + * @return boolean + */ + public function isReady() + { + if ($this->ready === true) { + return true; + } + + $this->connect(); + + return $this->ready; + } + + /** * Checks if current target is connected, installed and updated. * @@ -657,29 +680,37 @@ final class DBMaintainer /** * This function keeps same functionality as install.php:parse_mysqli_dump. * - * @param string $path Path where SQL dump file is stored. + * @param string $path Path where SQL dump file is stored. + * @param boolean $transactional Use transactions from file (true) (MRs). * * @return boolean Success or not. */ - private function applyDump(string $path) + private function applyDump(string $path, bool $transactional=false) { if (file_exists($path) === true) { - $file_content = file($path); - $query = ''; - foreach ($file_content as $sql_line) { - if (trim($sql_line) !== '' - && strpos($sql_line, '-- ') === false - ) { - $query .= $sql_line; - if ((bool) preg_match("/;[\040]*\$/", $sql_line) === true) { - $result = $this->dbh->query($query); - if ((bool) $result === false) { - $this->lastError = $this->dbh->errno.': '; - $this->lastError .= $this->dbh->error; - return false; - } + if ($transactional === true) { + global $config; + // MR are loaded in transactions. + include_once $config['homedir'].'/include/db/mysql.php'; + return db_run_sql_file($path); + } else { + $file_content = file($path); + $query = ''; + foreach ($file_content as $sql_line) { + if (trim($sql_line) !== '' + && strpos($sql_line, '-- ') === false + ) { + $query .= $sql_line; + if ((bool) preg_match("/;[\040]*\$/", $sql_line) === true) { + $result = $this->dbh->query($query); + if ((bool) $result === false) { + $this->lastError = $this->dbh->errno.': '; + $this->lastError .= $this->dbh->error; + return false; + } - $query = ''; + $query = ''; + } } } } diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index 12f5825a8f..aff419a62a 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -603,6 +603,11 @@ select:-internal-list-box { .flex-nowrap { flex-wrap: nowrap; } + +.flex-evenly { + justify-content: space-evenly; +} + .flex-row-baseline { display: flex; flex-direction: row; diff --git a/pandora_console/include/styles/setup.css b/pandora_console/include/styles/setup.css index 5c7b304772..c7f9ededaf 100644 --- a/pandora_console/include/styles/setup.css +++ b/pandora_console/include/styles/setup.css @@ -18,3 +18,7 @@ input[type="text"], input[type="number"] { width: 220px; } + +.fit > tbody > tr > td img { + width: 15px; +} From 712079c30e1edd9fd43c43dbbcf1349ce941e613 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Mon, 1 Feb 2021 15:00:54 +0100 Subject: [PATCH 18/49] RC1 #4755 --- pandora_console/include/functions_config.php | 4 ++-- pandora_console/include/lib/Core/Config.php | 18 +++++++++--------- pandora_server/util/pandora_db.pl | 3 +++ 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php index 55a78f16da..601741a0c5 100644 --- a/pandora_console/include/functions_config.php +++ b/pandora_console/include/functions_config.php @@ -1558,11 +1558,11 @@ function config_update_config() if (Config::set( 'history_partitions_auto', - get_parameter_switch('history_partitions_auto'), + get_parameter_switch('history_partitions_auto', 0), true ) !== true ) { - $error_update[] = __('Historical database days compact'); + $error_update[] = __('Historical database partitions'); } if (Config::set( diff --git a/pandora_console/include/lib/Core/Config.php b/pandora_console/include/lib/Core/Config.php index 620c63f84a..8970d03835 100644 --- a/pandora_console/include/lib/Core/Config.php +++ b/pandora_console/include/lib/Core/Config.php @@ -73,18 +73,18 @@ final class Config false ); - if ($config['history_db_connection'] !== false) { - $data = \db_get_all_rows_sql( - 'SELECT * FROM `tconfig`', - false, - false, - $config['history_db_connection'] - ); - } - ob_get_clean(); } + if ($config['history_db_connection'] !== false) { + $data = \db_get_all_rows_sql( + 'SELECT * FROM `tconfig`', + false, + false, + $config['history_db_connection'] + ); + } + if (is_array($data) !== true) { return []; } diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 27db50c38b..d3d7387d7e 100755 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -1134,6 +1134,9 @@ if (defined($history_dbh)) { 1 # Disable certain funcionality while runningn in historical database. ); + # Handle partitions. + enterprise_hook('handle_partitions', [$h_conf, $history_dbh]); + } # Release the lock From 4978ac30813e22c2aecdcc47db8ee2708e3fe998 Mon Sep 17 00:00:00 2001 From: Jose Gonzalez Date: Thu, 4 Feb 2021 16:41:47 +0100 Subject: [PATCH 19/49] Fix issue --- pandora_server/lib/PandoraFMS/Recon/Base.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pandora_server/lib/PandoraFMS/Recon/Base.pm b/pandora_server/lib/PandoraFMS/Recon/Base.pm index 5f01f1630f..2831fc44c3 100644 --- a/pandora_server/lib/PandoraFMS/Recon/Base.pm +++ b/pandora_server/lib/PandoraFMS/Recon/Base.pm @@ -2112,14 +2112,14 @@ sub snmp_get_command { my $command = "snmpwalk -M$DEVNULL -r$self->{'snmp_checks'} -t$self->{'snmp_timeout'} -v$self->{'snmp_version'} -On -Oe "; if ($self->{'snmp_version'} eq "3") { if ($self->{'community'}) { # Context - $command .= " -N $self->{'community'} "; + $command .= " -N \'$self->{'community'}\' "; } $command .= " -l$self->{'snmp_security_level'} "; if ($self->{'snmp_security_level'} ne "noAuthNoPriv") { - $command .= " -u$self->{'snmp_auth_user'} -a$self->{'snmp_auth_method'} -A$self->{'snmp_auth_pass'} "; + $command .= " -u$self->{'snmp_auth_user'} -a $self->{'snmp_auth_method'} -A \'$self->{'snmp_auth_pass'}\' "; } if ($self->{'snmp_security_level'} eq "authPriv") { - $command .= " -x$self->{'snmp_privacy_method'} -X$self->{'snmp_privacy_pass'} "; + $command .= " -x$self->{'snmp_privacy_method'} -X \'$self->{'snmp_privacy_pass'}\' "; } } else { $command .= " -c$community$vlan "; From 4b0f96126bf2fba378b0d166cf73aca50f41f9bd Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Mon, 22 Feb 2021 12:25:24 +0100 Subject: [PATCH 20/49] minor fix --- pandora_console/include/functions_config.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php index ac24435712..95265cebff 100644 --- a/pandora_console/include/functions_config.php +++ b/pandora_console/include/functions_config.php @@ -1469,7 +1469,11 @@ function config_update_config() ) { // Same definition for active and historical database! // This is a critical error. - $errors[] = __('Active and historical database cannot be the same.'); + $config['error_config_update_config']['correct'] = false; + $config['error_config_update_config']['message'] = __( + 'Active and historical database cannot be the same.' + ); + return; } else { if (!config_update_value('history_db_host', get_parameter('history_db_host'))) { $error_update[] = __('Host'); From b6c02bd95c41f4f98c6f06af05ab200d135e2ec8 Mon Sep 17 00:00:00 2001 From: marcos Date: Mon, 22 Mar 2021 15:21:09 +0100 Subject: [PATCH 21/49] fixed visual error --- pandora_console/include/styles/menu.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/include/styles/menu.css b/pandora_console/include/styles/menu.css index 15a634edb1..0b3aec965e 100644 --- a/pandora_console/include/styles/menu.css +++ b/pandora_console/include/styles/menu.css @@ -50,7 +50,7 @@ width: 100%; } -li:hover ul { +li:hover ul:not(.invisible) { display: block; } From 90c825888ae5116ea00425ce83b43e7ab38e8e63 Mon Sep 17 00:00:00 2001 From: marcos Date: Tue, 23 Mar 2021 15:12:57 +0100 Subject: [PATCH 22/49] fixed visual error --- .../godmode/reporting/reporting_builder.item_editor.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandora_console/godmode/reporting/reporting_builder.item_editor.php b/pandora_console/godmode/reporting/reporting_builder.item_editor.php index 0a6c53d766..7ef69743e1 100755 --- a/pandora_console/godmode/reporting/reporting_builder.item_editor.php +++ b/pandora_console/godmode/reporting/reporting_builder.item_editor.php @@ -3290,7 +3290,7 @@ function print_SLA_list($width, $action, $idItem=null) echo ''; ?> - + - + Date: Tue, 23 Mar 2021 16:15:57 +0100 Subject: [PATCH 23/49] Fix --- pandora_server/lib/PandoraFMS/Recon/Base.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_server/lib/PandoraFMS/Recon/Base.pm b/pandora_server/lib/PandoraFMS/Recon/Base.pm index 2831fc44c3..537e948884 100644 --- a/pandora_server/lib/PandoraFMS/Recon/Base.pm +++ b/pandora_server/lib/PandoraFMS/Recon/Base.pm @@ -2122,7 +2122,7 @@ sub snmp_get_command { $command .= " -x$self->{'snmp_privacy_method'} -X \'$self->{'snmp_privacy_pass'}\' "; } } else { - $command .= " -c$community$vlan "; + $command .= " -c\'$community\'$vlan "; } return "$command $device $oid 2>$DEVNULL"; From af98637680afea175eb9e046c4e69187fc3f22c1 Mon Sep 17 00:00:00 2001 From: Jose Gonzalez Date: Wed, 24 Mar 2021 12:45:25 +0100 Subject: [PATCH 24/49] Fix some documentary issues --- pandora_console/include/functions_html.php | 29 ++++++++++++---------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php index 3b1b1bf126..dafdab30c2 100644 --- a/pandora_console/include/functions_html.php +++ b/pandora_console/include/functions_html.php @@ -2208,24 +2208,26 @@ function html_print_input_text_extended( /** - * Render an input password element. + * Render a section
html element. * - * The element will have an id like: "password-$name" - * - * @param mixed parameters: + * @param array $options Parameters: * - id: string * - style: string + * - class: string + * - title: string * - hidden: boolean - * - content: string - * @param bool return or echo flag + * - content: string. + * @param boolean $return Return or echo flag. * * @return string HTML code if return parameter is true. */ -function html_print_div($options, $return=false) -{ +function html_print_div( + array $options, + bool $return=false +) { $output = ' html element. * * @param array $options Parameters - * - id: string - * - style: string - * - title: string + * - id: string. + * - style: string. + * - title: string. * - href: string. + * - content: string. * @param boolean $return Return or echo flag. * * @return string HTML code if return parameter is true. From eaed8aa09a8be83af9b9164f22d4d5fb7bfe11b9 Mon Sep 17 00:00:00 2001 From: marcos Date: Wed, 24 Mar 2021 13:10:29 +0100 Subject: [PATCH 25/49] fixed visual error --- pandora_console/include/styles/menu.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/include/styles/menu.css b/pandora_console/include/styles/menu.css index 0b3aec965e..c3e52fdec5 100644 --- a/pandora_console/include/styles/menu.css +++ b/pandora_console/include/styles/menu.css @@ -50,7 +50,7 @@ width: 100%; } -li:hover ul:not(.invisible) { +.menu_full li:hover ul { display: block; } From d312f764eddf12b119665f1a6da5d2cf2ac220b4 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Wed, 24 Mar 2021 13:43:14 +0100 Subject: [PATCH 26/49] Hack to use old functions from PandoraDB --- .../include/lib/Core/DBMaintainer.php | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/pandora_console/include/lib/Core/DBMaintainer.php b/pandora_console/include/lib/Core/DBMaintainer.php index 8b3fc75bab..8e8f009b7b 100644 --- a/pandora_console/include/lib/Core/DBMaintainer.php +++ b/pandora_console/include/lib/Core/DBMaintainer.php @@ -690,9 +690,37 @@ final class DBMaintainer if (file_exists($path) === true) { if ($transactional === true) { global $config; + + // Adapt to PandoraFMS classic way to do things... + $backup_dbhost = $config['dbhost']; + $backup_dbuser = $config['dbuser']; + $backup_dbpass = $config['dbpass']; + $backup_dbname = $config['dbname']; + $backup_dbport = $config['dbport']; + $backup_mysqli = $config['mysqli']; + + $config['dbhost'] = $this->host; + $config['dbuser'] = $this->user; + $config['dbpass'] = $this->pass; + $config['dbname'] = $this->name; + $config['dbport'] = $this->port; + + // Not using mysqli in > php 7 is a completely non-sense. + $config['mysqli'] = true; + // MR are loaded in transactions. include_once $config['homedir'].'/include/db/mysql.php'; - return db_run_sql_file($path); + $return = db_run_sql_file($path); + + // Revert global variable. + $config['dbhost'] = $backup_dbhost; + $config['dbuser'] = $backup_dbuser; + $config['dbpass'] = $backup_dbpass; + $config['dbname'] = $backup_dbname; + $config['dbport'] = $backup_dbport; + $config['mysqli'] = $backup_mysqli; + + return (bool) $return; } else { $file_content = file($path); $query = ''; From b4cc075870c9c7f10b72b7f508ff4ab9a8ee7bf9 Mon Sep 17 00:00:00 2001 From: marcos Date: Wed, 24 Mar 2021 14:10:46 +0100 Subject: [PATCH 27/49] resolved error with modal module detail on agent detail --- .../operation/agentes/estado_monitores.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/pandora_console/operation/agentes/estado_monitores.php b/pandora_console/operation/agentes/estado_monitores.php index f4d00901d7..241cd5aee8 100755 --- a/pandora_console/operation/agentes/estado_monitores.php +++ b/pandora_console/operation/agentes/estado_monitores.php @@ -364,7 +364,7 @@ ui_toggle( ui_require_css_file('cluetip', 'include/styles/js/'); ui_require_jquery_file('cluetip'); -echo ""; +echo "
"; ui_include_time_picker(); ui_require_jquery_file('ui.datepicker-'.get_user_language(), 'include/javascript/i18n/'); @@ -386,15 +386,7 @@ ui_require_jquery_file('ui.datepicker-'.get_user_language(), 'include/javascript cluetipClass: 'default', sticky: true, mouseOutClose: 'both', - closeText: ' - 'invert_filter'] - ); - ?> - ' + closeText: ' 'invert_filter']); ?>' }); // Show the modal window of an module From 12767683dcf2b6936d4d4cd16fefee8cc272de32 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Wed, 24 Mar 2021 16:25:27 +0100 Subject: [PATCH 28/49] minor fixes --- pandora_console/include/lib/ModuleType.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pandora_console/include/lib/ModuleType.php b/pandora_console/include/lib/ModuleType.php index c9bb192a9a..26ffccc100 100644 --- a/pandora_console/include/lib/ModuleType.php +++ b/pandora_console/include/lib/ModuleType.php @@ -102,7 +102,6 @@ class ModuleType extends Entity public static function validate(int $id_module_type, int $id_modulo) { switch ($id_modulo) { - default: case MODULE_PLUGIN: case MODULE_PREDICTION: case MODULE_DATA: @@ -114,6 +113,7 @@ class ModuleType extends Entity return false; } break; + case MODULE_NETWORK: case MODULE_SNMP: if ($id_module_type < 6 || $id_module_type > 18) { @@ -132,6 +132,9 @@ class ModuleType extends Entity return false; } break; + + default: + return false; } return true; From f046069de1487a15c7954a8229796c3a6839e269 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Wed, 24 Mar 2021 17:49:42 +0100 Subject: [PATCH 29/49] old-school style setup --- pandora_console/include/styles/setup.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pandora_console/include/styles/setup.css b/pandora_console/include/styles/setup.css index c7f9ededaf..c3e1bb276d 100644 --- a/pandora_console/include/styles/setup.css +++ b/pandora_console/include/styles/setup.css @@ -22,3 +22,12 @@ input[type="number"] { .fit > tbody > tr > td img { width: 15px; } + +.clean-toggles .white_table_graph_header { + border: none; +} + +.dbhist tr td:first-child { + width: 45%; + min-width: 450px; +} From 7b7ef3a757ab0b48c4c4e975d38f5e310dc26f73 Mon Sep 17 00:00:00 2001 From: fbsanchez Date: Thu, 25 Mar 2021 14:25:09 +0100 Subject: [PATCH 30/49] minor improvement (err. messages) --- pandora_console/include/db/mysql.php | 1 + .../include/lib/Core/DBMaintainer.php | 21 ++++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/pandora_console/include/db/mysql.php b/pandora_console/include/db/mysql.php index 13e59f7247..8b7c81c9f9 100644 --- a/pandora_console/include/db/mysql.php +++ b/pandora_console/include/db/mysql.php @@ -1496,6 +1496,7 @@ function db_run_sql_file($location) // Undo results } + $config['db_run_sql_file_error'] = $mysqli->error; return false; } } diff --git a/pandora_console/include/lib/Core/DBMaintainer.php b/pandora_console/include/lib/Core/DBMaintainer.php index 8e8f009b7b..dc9754f01d 100644 --- a/pandora_console/include/lib/Core/DBMaintainer.php +++ b/pandora_console/include/lib/Core/DBMaintainer.php @@ -521,7 +521,10 @@ final class DBMaintainer $target_mr = $matches[1]; } - $active_mr = (int) Config::get('MR', null); + // Active database MR version. + $active_mr = (int) Config::get('MR', 0); + + // Historical database MR version. $last_mr_curr = (int) $this->getValue( 'tconfig', 'value', @@ -575,18 +578,19 @@ final class DBMaintainer $err .= $last_mr_curr.': '; $this->lastError = $err.$this->lastError; return false; + } else { + // Update MR value. + $this->setConfigToken('MR', $last_mr_curr); } } } - if ($last_mr_curr === $active_mr) { - $this->setConfigToken('MR', $last_mr_curr); - - return true; + if ($last_mr_curr !== $active_mr) { + $this->lastError = 'Unknown database schema version, check MR in both active and historical database'; + return false; } - $this->lastError = 'Unknown database schema version, check MR in both active and historical database'; - return false; + return true; } @@ -711,6 +715,9 @@ final class DBMaintainer // MR are loaded in transactions. include_once $config['homedir'].'/include/db/mysql.php'; $return = db_run_sql_file($path); + if ($return === false) { + $this->lastError = $config['db_run_sql_file_error']; + } // Revert global variable. $config['dbhost'] = $backup_dbhost; From b7f845a64dac6ce7eed7dea3c833db12dcbf319a Mon Sep 17 00:00:00 2001 From: marcos Date: Thu, 25 Mar 2021 14:27:41 +0100 Subject: [PATCH 31/49] fixed visual error --- pandora_console/include/styles/wizard.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandora_console/include/styles/wizard.css b/pandora_console/include/styles/wizard.css index 45c77b8746..a208776304 100644 --- a/pandora_console/include/styles/wizard.css +++ b/pandora_console/include/styles/wizard.css @@ -9,8 +9,8 @@ ul.wizard { } ul.wizard li { - padding-bottom: 10px; - padding-top: 10px; + padding-bottom: 0px; + padding-top: 0px; } ul.wizard.inline li { From ec4f23e502e6548c03a2556de782128c74d9f9b7 Mon Sep 17 00:00:00 2001 From: marcos Date: Thu, 25 Mar 2021 14:36:51 +0100 Subject: [PATCH 32/49] fixed visual error --- pandora_console/extensions/agents_modules.php | 2 +- pandora_console/include/styles/pandora.css | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pandora_console/extensions/agents_modules.php b/pandora_console/extensions/agents_modules.php index a1483862f1..0abde09010 100644 --- a/pandora_console/extensions/agents_modules.php +++ b/pandora_console/extensions/agents_modules.php @@ -686,7 +686,7 @@ function mainAgentsModules() echo ''; - echo "".__('Agents').' / '.__('Modules').''; + echo "".__('Agents').' / '.__('Modules').''; if ($hor_offset > 0) { $new_hor_offset = ($hor_offset - $block); diff --git a/pandora_console/include/styles/pandora.css b/pandora_console/include/styles/pandora.css index 4016fdf18d..0c42b25de4 100644 --- a/pandora_console/include/styles/pandora.css +++ b/pandora_console/include/styles/pandora.css @@ -8441,3 +8441,6 @@ div.stat-win-spinner img { width: 100px; height: 100px; } +.lign_right { + text-align: right; +} From b8a72f058362c1d29e55c39cc550b1227f90d7c7 Mon Sep 17 00:00:00 2001 From: marcos Date: Thu, 25 Mar 2021 14:42:34 +0100 Subject: [PATCH 33/49] fixed visual error --- pandora_console/include/styles/wizard.css | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pandora_console/include/styles/wizard.css b/pandora_console/include/styles/wizard.css index a208776304..88e0a2bc42 100644 --- a/pandora_console/include/styles/wizard.css +++ b/pandora_console/include/styles/wizard.css @@ -9,8 +9,8 @@ ul.wizard { } ul.wizard li { - padding-bottom: 0px; - padding-top: 0px; + padding-bottom: 10px; + padding-top: 10px; } ul.wizard.inline li { @@ -165,3 +165,11 @@ ul.wizard li > textarea { justify-content: space-evenly !important; flex: 1 1 auto; } + +ul.wizard li.mrgn_0px { + margin: 0; +} + +ul.wizard li.pdd_0px { + padding: 0; +} From c10c1b09cfcd20f68c1a91530b0e1d2aeb727f34 Mon Sep 17 00:00:00 2001 From: artica Date: Fri, 26 Mar 2021 01:00:18 +0100 Subject: [PATCH 34/49] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 70545a78b6..74e958a2b9 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.752-210325 +Version: 7.0NG.752-210326 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index dafeaaa35a..f5f595c814 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.752-210325" +pandora_version="7.0NG.752-210326" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index d62aaf51ea..49b99da877 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -1016,7 +1016,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.752'; -use constant AGENT_BUILD => '210325'; +use constant AGENT_BUILD => '210326'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 65ebf1591e..bccc67d858 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.752 -%define release 210325 +%define release 210326 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index c889ffe5e7..e559d828a4 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.752 -%define release 210325 +%define release 210326 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index c9a12cf59f..368d010da6 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.752" -PI_BUILD="210325" +PI_BUILD="210326" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index ea1d398fc7..b095e3f68c 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{210325} +{210326} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 50ea94d212..fc197541cf 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.752(Build 210325)") +#define PANDORA_VERSION ("7.0NG.752(Build 210326)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 031cae79e1..a237f273a3 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.752(Build 210325))" + VALUE "ProductVersion", "(7.0NG.752(Build 210326))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index fa0c953087..ecefe2996f 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.752-210325 +Version: 7.0NG.752-210326 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 9b876c3b61..c0d782e0f7 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.752-210325" +pandora_version="7.0NG.752-210326" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index f38b4c5ec9..5961354d1b 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC210325'; +$build_version = 'PC210326'; $pandora_version = 'v7.0NG.752'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 2f1bbbc9fc..c2203c6bbc 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@
[ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 19642d43f3..f0fd1399bd 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.752 -%define release 210325 +%define release 210326 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index c4718c6d06..baead7882a 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.752 -%define release 210325 +%define release 210326 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 4cd23154de..7c19ac3e5a 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.752" -PI_BUILD="210325" +PI_BUILD="210326" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 185fe87472..0eaca24fd2 100755 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -35,7 +35,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.752 PS210325"; +my $version = "7.0NG.752 PS210326"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 23fc2fe995..8cce69d1c2 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.752 PS210325"; +my $version = "7.0NG.752 PS210326"; # save program name for logging my $progname = basename($0); From 9dd7ee7cbca0f270f49a81f15d7af43a507d00e8 Mon Sep 17 00:00:00 2001 From: Daniel Barbero Martin Date: Fri, 26 Mar 2021 09:15:05 +0100 Subject: [PATCH 35/49] fixed minor error --- pandora_console/include/styles/visual_maps.css | 1 + 1 file changed, 1 insertion(+) diff --git a/pandora_console/include/styles/visual_maps.css b/pandora_console/include/styles/visual_maps.css index 1136fda1d2..323855ffdd 100644 --- a/pandora_console/include/styles/visual_maps.css +++ b/pandora_console/include/styles/visual_maps.css @@ -7,6 +7,7 @@ div.external-visual-console-container { width: 100%; overflow-x: auto; + overflow-y: hidden; } div#vc-controls { From 3d350ba4819011daed1d9db04ecc344a417b77ca Mon Sep 17 00:00:00 2001 From: Marcos Alconada Date: Fri, 26 Mar 2021 09:32:30 +0000 Subject: [PATCH 36/49] fixed visual error --- .../agentes/status_monitor_custom_fields.php | 8 +++----- pandora_console/include/functions_reporting.php | 2 +- pandora_console/operation/agentes/tactical.php | 13 +++++++++---- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/pandora_console/godmode/agentes/status_monitor_custom_fields.php b/pandora_console/godmode/agentes/status_monitor_custom_fields.php index aadc0516bb..2b4b3d0538 100644 --- a/pandora_console/godmode/agentes/status_monitor_custom_fields.php +++ b/pandora_console/godmode/agentes/status_monitor_custom_fields.php @@ -27,8 +27,6 @@ if (! check_acl($config['id_user'], 0, 'AR') return; } - - $update = get_parameter('upd_button', ''); $default = (int) get_parameter('default', 0); @@ -49,7 +47,7 @@ if ($default != 0) { 'value' => $status_monitor_fields, ]; - // update 'status_monitor_fields' in tconfig table to keep the value at update. + // Update 'status_monitor_fields' in tconfig table to keep the value at update. $result = db_process_sql_update( 'tconfig', $values, @@ -67,7 +65,7 @@ $fields_selected = explode(',', $config['status_monitor_fields']); $result_selected = []; -// show list of fields selected. +// Show list of fields selected. if ($fields_selected[0] != '') { foreach ($fields_selected as $field_selected) { switch ($field_selected) { @@ -239,7 +237,7 @@ $(document).ready (function () { if(selected_fields_total === current_fields_size){ display_confirm_dialog( - "'.__('There must be at least one custom field. Timestamp will be set by default').''; ?>", + "'.__('There must be at least one custom field. Timestamp will be set by default').''; ?>", "", "", function () { diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php index aab903a361..e0700c93e0 100755 --- a/pandora_console/include/functions_reporting.php +++ b/pandora_console/include/functions_reporting.php @@ -12807,7 +12807,7 @@ function reporting_get_stats_servers() $tdata[0] = html_print_image('images/database.png', true, ['title' => __('Local modules'), 'class' => 'invert_filter']); $tdata[1] = ''.format_numeric($server_performance['total_local_modules']).''; $tdata[2] = ''.format_numeric($server_performance['local_modules_rate'], 2).''; - $tdata[3] = html_print_image('images/database.png', true, ['title' => __('Ratio').': '.__('Modules by second'), 'class' => 'invert_filter']).'/sec '; + $tdata[3] = html_print_image('images/module.png', true, ['title' => __('Ratio').': '.__('Modules by second'), 'class' => 'invert_filter']).'/sec '; $table_srv->rowclass[] = ''; $table_srv->data[] = $tdata; diff --git a/pandora_console/operation/agentes/tactical.php b/pandora_console/operation/agentes/tactical.php index edfbe50bb9..d7f668597e 100755 --- a/pandora_console/operation/agentes/tactical.php +++ b/pandora_console/operation/agentes/tactical.php @@ -120,18 +120,23 @@ echo ''; // --------------------------------------------------------------------- // The status horizontal bars (Global health, Monitor sanity... // --------------------------------------------------------------------- +$bg_color = 'background-color: #222'; +if ($config['style'] !== 'pandora_black') { + $bg_color = 'background-color: #fff'; +} + $table = new stdClass(); $table->width = '100%'; -$table->class = 'info_table no-td-borders td-bg-white'; +$table->class = 'info_table no-td-borders'; $table->cellpadding = 2; $table->cellspacing = 2; $table->border = 0; $table->head = []; $table->data = []; -$table->style = []; +$table->style = [$bg_color]; $stats = reporting_get_stats_indicators($data, 120, 10, false); -$status = ''; +$status = '
'; foreach ($stats as $stat) { $status .= ''; } @@ -175,7 +180,7 @@ ui_toggle( echo ''; // Left column -echo ' - +
'.$stat['title'].''.''.$stat['graph'].'
'; +echo ''; // --------------------------------------------------------------------- // Last events information From 8e57e1645cd2b4a1182e19ee34aa52e2881ceb44 Mon Sep 17 00:00:00 2001 From: Daniel Barbero Martin Date: Fri, 26 Mar 2021 10:34:07 +0100 Subject: [PATCH 37/49] fixed minor error --- pandora_console/include/lib/Dashboard/Widgets/events_list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/include/lib/Dashboard/Widgets/events_list.php b/pandora_console/include/lib/Dashboard/Widgets/events_list.php index 904cd2cdb8..85ef5978d1 100644 --- a/pandora_console/include/lib/Dashboard/Widgets/events_list.php +++ b/pandora_console/include/lib/Dashboard/Widgets/events_list.php @@ -620,7 +620,7 @@ class EventsListWidget extends Widget // Filter. $filter, // Offset. - null, + 0, // Limit. $this->values['limit'], // Order. From 193d6bf2d2fbceb77c3ef04e81ad1ad7bec2f21e Mon Sep 17 00:00:00 2001 From: Daniel Barbero Martin Date: Fri, 26 Mar 2021 10:37:44 +0100 Subject: [PATCH 38/49] fixed minor error --- .../include/lib/Dashboard/Widgets/system_group_status.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pandora_console/include/lib/Dashboard/Widgets/system_group_status.php b/pandora_console/include/lib/Dashboard/Widgets/system_group_status.php index f784c76cea..9c3391f8ff 100644 --- a/pandora_console/include/lib/Dashboard/Widgets/system_group_status.php +++ b/pandora_console/include/lib/Dashboard/Widgets/system_group_status.php @@ -164,6 +164,9 @@ class SystemGroupStatusWidget extends Widget // This forces at least a first configuration. $this->configurationRequired = false; + if (empty($this->values['groupId']) === true) { + $this->configurationRequired = true; + } $this->overflow_scrollbars = false; } @@ -299,6 +302,7 @@ class SystemGroupStatusWidget extends Widget 'return' => true, 'multiple' => true, 'returnAllGroup' => $return_all_group, + 'required' => true, ], ]; From 021675d82561bcf1cd71851bc9fa0fc449b7cd28 Mon Sep 17 00:00:00 2001 From: Daniel Barbero Martin Date: Fri, 26 Mar 2021 11:28:34 +0100 Subject: [PATCH 39/49] fixed minor error --- .../include/functions_custom_graphs.php | 2 +- .../lib/Dashboard/Widgets/custom_graph.php | 23 +++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/pandora_console/include/functions_custom_graphs.php b/pandora_console/include/functions_custom_graphs.php index e50d15fbb2..17f52de0f1 100644 --- a/pandora_console/include/functions_custom_graphs.php +++ b/pandora_console/include/functions_custom_graphs.php @@ -113,7 +113,7 @@ function custom_graphs_create( * @param $returnAllGroup Wheter to return graphs of group All or not. * @param $privileges Privileges to check in user group * - * @return Custom graphs of a an user. Empty array if none. + * @return array graphs of a an user. Empty array if none. */ function custom_graphs_get_user($id_user=0, $only_names=false, $returnAllGroup=true, $privileges='RR') { diff --git a/pandora_console/include/lib/Dashboard/Widgets/custom_graph.php b/pandora_console/include/lib/Dashboard/Widgets/custom_graph.php index e883dd0ec2..0913cf212b 100644 --- a/pandora_console/include/lib/Dashboard/Widgets/custom_graph.php +++ b/pandora_console/include/lib/Dashboard/Widgets/custom_graph.php @@ -245,17 +245,26 @@ class CustomGraphWidget extends Widget $return_all_group = false; - if (users_can_manage_group_all('RM')) { + if (users_can_manage_group_all('RM') === true) { $return_all_group = true; } // Custom graph. $fields = \custom_graphs_get_user(0, false, $return_all_group); - // If currently selected graph is not included in fields array (it belongs to a group over which user has no permissions), then add it to fields array. - // This is aimed to avoid overriding this value when a user with narrower permissions edits widget configuration. - if ($values['id_graph'] !== null && !array_key_exists($values['id_graph'], $fields)) { - $selected_graph = db_get_row('tgraph', 'id_graph', $values['id_graph']); + // If currently selected graph is not included in fields array + // (it belongs to a group over which user has no permissions), + // then add it to fields array. + // This is aimed to avoid overriding this value when a user + // with narrower permissions edits widget configuration. + if ($values['id_graph'] !== null + && array_key_exists($values['id_graph'], $fields) === false + ) { + $selected_graph = db_get_row( + 'tgraph', + 'id_graph', + $values['id_graph'] + ); $fields[$values['id_graph']] = $selected_graph; } @@ -366,7 +375,8 @@ class CustomGraphWidget extends Widget ); $hackLegendHight = (30 * count($sources)); - if ($hackLegendHight > ($size['height'] - 10 - $hackLegendHight)) { + $operation = ($size['height'] - 10 - $hackLegendHight); + if ($hackLegendHight < $operation) { $height = ($size['height'] - $hackLegendHight); } else { $height = ($size['height'] - 10); @@ -406,7 +416,6 @@ class CustomGraphWidget extends Widget 'height' => $height, 'only_image' => false, 'homeurl' => $config['homeurl'], - 'percentil' => $percentil, 'backgroundColor' => 'transparent', 'menu' => false, 'show_legend' => $this->values['showLegend'], From 2c86e3e26cb70faa5d65da04b9aa7ed299c17ae1 Mon Sep 17 00:00:00 2001 From: Calvo Date: Fri, 26 Mar 2021 12:20:37 +0100 Subject: [PATCH 40/49] Substituted eye with operation (magnifier) icon on credential store and tasklist --- pandora_console/godmode/wizards/DiscoveryTaskList.class.php | 2 +- pandora_console/include/class/CredentialStore.class.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php index 4a919b2653..1b59cf282a 100644 --- a/pandora_console/godmode/wizards/DiscoveryTaskList.class.php +++ b/pandora_console/godmode/wizards/DiscoveryTaskList.class.php @@ -850,7 +850,7 @@ class DiscoveryTaskList extends HTML $data[9] .= ''; $data[9] .= html_print_image( - 'images/eye.png', + 'images/operation.png', true, [ 'title' => __('View summary'), diff --git a/pandora_console/include/class/CredentialStore.class.php b/pandora_console/include/class/CredentialStore.class.php index 375f9cb64c..9624f7daaa 100644 --- a/pandora_console/include/class/CredentialStore.class.php +++ b/pandora_console/include/class/CredentialStore.class.php @@ -1075,7 +1075,7 @@ class CredentialStore extends Wizard item.options = ' __('Show')]); ?>'; + item.options += '\')" > __('Show')]); ?>'; item.options += '\n"; var updating = "\n"; var package_updated_successfully = "\n"; + var package_not_updated = "\n"; var if_there_are_any_database_change = "\n"; var mr_available = "\n"; var package_available = "\n"; From 487a9b96d9800c4c95f52f7cd05a2f22d9e3cc8f Mon Sep 17 00:00:00 2001 From: Daniel Barbero Martin Date: Fri, 26 Mar 2021 13:25:42 +0100 Subject: [PATCH 42/49] fixed minor error --- .../godmode/reporting/visual_console_builder.data.php | 4 ++-- .../godmode/reporting/visual_console_builder.php | 11 +++++++---- .../reporting/visual_console_builder.wizard.php | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/pandora_console/godmode/reporting/visual_console_builder.data.php b/pandora_console/godmode/reporting/visual_console_builder.data.php index 5e84b1375e..5a79e5af2e 100644 --- a/pandora_console/godmode/reporting/visual_console_builder.data.php +++ b/pandora_console/godmode/reporting/visual_console_builder.data.php @@ -122,10 +122,10 @@ if ($action == 'new') { src="">'; } else { if (defined('METACONSOLE')) { - $table->data[0][2] = 'data[0][2] = ''; } else { - $table->data[0][2] = 'data[0][2] = ''; } diff --git a/pandora_console/godmode/reporting/visual_console_builder.php b/pandora_console/godmode/reporting/visual_console_builder.php index 26fb5e0912..fd3b1fbebf 100755 --- a/pandora_console/godmode/reporting/visual_console_builder.php +++ b/pandora_console/godmode/reporting/visual_console_builder.php @@ -20,10 +20,13 @@ require_once $config['homedir'].'/include/functions_visual_map.php'; require_once $config['homedir'].'/include/functions_agents.php'; enterprise_include_once('include/functions_visual_map.php'); -// Retrieve the visual console id +// Retrieve the visual console id. set_unless_defined($idVisualConsole, 0); -// Set default +// Set default. $idVisualConsole = get_parameter('id_visual_console', $idVisualConsole); +if (empty($idVisualConsole) === true) { + $idVisualConsole = get_parameter('id_visualmap', 0); +} if (!defined('METACONSOLE')) { $action_name_parameter = 'action'; @@ -795,7 +798,7 @@ $buttons['view'] = [ 'text' => ''.html_print_image('images/operation.png', true, ['title' => __('View'), 'class' => 'invert_filter']).'', ]; -if ($action == 'new' || $idVisualConsole === false) { +if ($idVisualConsole === false) { $buttons = ['data' => $buttons['data']]; // Show only the data tab // If it is a fail try, reset the values @@ -822,7 +825,7 @@ if ($statusProcessInDB !== null) { echo $statusProcessInDB['message']; } -// The source code for PAINT THE PAGE +// The source code for PAINT THE PAGE. switch ($activeTab) { case 'wizard': include_once $config['homedir'].'/godmode/reporting/visual_console_builder.wizard.php'; diff --git a/pandora_console/godmode/reporting/visual_console_builder.wizard.php b/pandora_console/godmode/reporting/visual_console_builder.wizard.php index 9185598c99..74adb71e61 100644 --- a/pandora_console/godmode/reporting/visual_console_builder.wizard.php +++ b/pandora_console/godmode/reporting/visual_console_builder.wizard.php @@ -16,7 +16,7 @@ global $config; check_login(); // Visual console required. -if (empty($visualConsole)) { +if (empty($visualConsole) === true) { db_pandora_audit( 'ACL Violation', 'Trying to access report builder' From 89ba8b43fbe61c6b7ba14def3aa7c911fc125b7f Mon Sep 17 00:00:00 2001 From: marcos Date: Fri, 26 Mar 2021 13:58:13 +0100 Subject: [PATCH 43/49] fixed visual error --- pandora_console/include/class/NetworkMap.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandora_console/include/class/NetworkMap.class.php b/pandora_console/include/class/NetworkMap.class.php index 831c15d474..4656ad39f4 100644 --- a/pandora_console/include/class/NetworkMap.class.php +++ b/pandora_console/include/class/NetworkMap.class.php @@ -3062,7 +3062,7 @@ class NetworkMap $table->data['template_row']['node_target'] = ''; $table->data['template_row']['edit'] = ''; - $table->data['template_row']['edit'] .= ''.html_print_image('images/config.png', true).''; + $table->data['template_row']['edit'] .= ''.html_print_image('images/config.png', true).''; $table->data['template_row']['edit'] .= ''.html_print_image('images/delete.png', true).''; From 56462b1b062c6f736e5b56c87402b6767641d5b6 Mon Sep 17 00:00:00 2001 From: marcos Date: Fri, 26 Mar 2021 14:32:29 +0100 Subject: [PATCH 44/49] fixed visual error --- .../godmode/gis_maps/configure_gis_map.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/pandora_console/godmode/gis_maps/configure_gis_map.php b/pandora_console/godmode/gis_maps/configure_gis_map.php index ecd8959a0c..c716cca43f 100644 --- a/pandora_console/godmode/gis_maps/configure_gis_map.php +++ b/pandora_console/godmode/gis_maps/configure_gis_map.php @@ -536,7 +536,7 @@ $table->valign[1] = 'top'; $table->data = []; $table->data[0][0] = '

'.__('List of layers').'

'; -$table->data[0][1] = ''.html_print_button(__('New layer'), 'new_layer', false, 'newLayer();', 'class="sub add"', true).''; +$table->data[0][1] = '
'.html_print_button(__('New layer'), 'new_layer', false, 'newLayer();', 'class="sub add "', true).'
'; $table->data[1][0] = '
'; $table->data[1][1] = '
"); var $agentAlias = $("" + agentAlias + ""); - var $removeBtn = $(' - 'invert_filter'] - ); - ?> - '); + var $removeBtn = $(' 'invert_filter']); ?> '); $removeBtn.click(function (event) { var $layerRow = $("tr#layer_row_" + layerId); From 9dd17acb57002bc9addbeaab1578d8ad4d3a2148 Mon Sep 17 00:00:00 2001 From: Marcos Alconada Date: Fri, 26 Mar 2021 13:40:55 +0000 Subject: [PATCH 45/49] fixed visual error --- .../godmode/events/event_responses.editor.php | 4 ++-- .../godmode/events/event_responses.list.php | 2 +- pandora_console/godmode/reporting/map_builder.php | 4 ++-- .../reporting/reporting_builder.list_items.php | 2 +- pandora_console/include/functions_treeview.php | 2 +- pandora_console/include/functions_ui.php | 2 +- .../include/javascript/tree/TreeController.js | 12 ++++++++---- .../agentes/interface_traffic_graph_win.php | 2 +- .../operation/agentes/pandora_networkmap.view.php | 2 +- pandora_console/operation/agentes/stat_win.php | 2 +- .../operation/events/events.build_table.php | 2 +- .../operation/reporting/reporting_viewer.php | 2 +- .../message_app_connectors/.vscode/settings.json | 4 ++-- 13 files changed, 23 insertions(+), 19 deletions(-) diff --git a/pandora_console/godmode/events/event_responses.editor.php b/pandora_console/godmode/events/event_responses.editor.php index bc57f85b40..4ba244b12c 100644 --- a/pandora_console/godmode/events/event_responses.editor.php +++ b/pandora_console/godmode/events/event_responses.editor.php @@ -201,7 +201,7 @@ if ($event_response_id == 0) { echo '
'; html_print_table($table); if (!defined('METACONSOLE')) { - echo '
'; + echo '
'; } else { echo '
'; } @@ -213,7 +213,7 @@ if ($event_response_id == 0) { echo ''; html_print_table($table); if (!defined('METACONSOLE')) { - echo '
'; + echo '
'; } else { echo '
'; } diff --git a/pandora_console/godmode/events/event_responses.list.php b/pandora_console/godmode/events/event_responses.list.php index 579317c534..ef0785c978 100644 --- a/pandora_console/godmode/events/event_responses.list.php +++ b/pandora_console/godmode/events/event_responses.list.php @@ -86,7 +86,7 @@ foreach ($event_responses as $response) { html_print_table($table); -echo '
'; +echo '
'; echo ''; html_print_submit_button( __('Create response'), diff --git a/pandora_console/godmode/reporting/map_builder.php b/pandora_console/godmode/reporting/map_builder.php index 60e1567ef0..f16db00285 100644 --- a/pandora_console/godmode/reporting/map_builder.php +++ b/pandora_console/godmode/reporting/map_builder.php @@ -515,9 +515,9 @@ if (!$maps && !is_metaconsole()) { if ($maps) { if (!is_metaconsole()) { - echo '
'; + echo '
'; } else { - echo '
'; + echo '
'; } } diff --git a/pandora_console/godmode/reporting/reporting_builder.list_items.php b/pandora_console/godmode/reporting/reporting_builder.list_items.php index 1a086a3bed..45be7d1d6b 100755 --- a/pandora_console/godmode/reporting/reporting_builder.list_items.php +++ b/pandora_console/godmode/reporting/reporting_builder.list_items.php @@ -664,7 +664,7 @@ if (defined('METACONSOLE')) { if (check_acl($config['id_user'], 0, 'RM')) { html_print_input_hidden('ids_items_to_delete', ''); - html_print_submit_button(__('Delete'), 'delete_btn', false, 'class="sub delete right"'); + html_print_submit_button(__('Delete'), 'delete_btn', false, 'class="sub delete right mrgn_btn_15px"'); } echo '
'; diff --git a/pandora_console/include/functions_treeview.php b/pandora_console/include/functions_treeview.php index e5648babb8..4a09a20dd9 100755 --- a/pandora_console/include/functions_treeview.php +++ b/pandora_console/include/functions_treeview.php @@ -473,7 +473,7 @@ function treeview_printAlertsTable($id_module, $server_data=[], $no_head=false) if ($user_access_node && check_acl($config['id_user'], $id_group, 'LW')) { // Actions table - echo '
'; + echo '
'; echo ''; html_print_submit_button(__('Go to alerts edition'), 'upd_button', false, 'class="sub search"'); echo ''; diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php index 25e656e2be..18602b0daf 100755 --- a/pandora_console/include/functions_ui.php +++ b/pandora_console/include/functions_ui.php @@ -333,7 +333,7 @@ function ui_print_message($message, $class='', $attributes='', $return=false, $t $output .= '
'.$text_message.''.$text_message.'
'; diff --git a/pandora_console/include/javascript/tree/TreeController.js b/pandora_console/include/javascript/tree/TreeController.js index 6c100a83e9..0fd6f07fb1 100644 --- a/pandora_console/include/javascript/tree/TreeController.js +++ b/pandora_console/include/javascript/tree/TreeController.js @@ -69,6 +69,10 @@ var TreeController = { messageLength = childGroupsLength + controller.tree.length; } + group_message = controller.foundMessage + ": " + messageLength; + if (controller.foundMessage == "") { + group_message = ""; + } $group .addClass("tree-root") .hide() @@ -78,9 +82,7 @@ var TreeController = { (controller.baseURL.length > 0 ? controller.baseURL : "") + 'images/pandora.png" />' + "" + - (controller.tree.length > 0 - ? controller.foundMessage + ": " + messageLength - : "") + + (controller.tree.length > 0 ? group_message : "") + "
" ); } else { @@ -1222,7 +1224,9 @@ var TreeController = { if (typeof data.auth_hash !== "undefined") { this.auth_hash = data.auth_hash; } - + if (data.tree[0]["rootType"] == "services") { + this.foundMessage = ""; + } this.load(); }, remove: function() { diff --git a/pandora_console/operation/agentes/interface_traffic_graph_win.php b/pandora_console/operation/agentes/interface_traffic_graph_win.php index d463d75e95..cb06076ac2 100644 --- a/pandora_console/operation/agentes/interface_traffic_graph_win.php +++ b/pandora_console/operation/agentes/interface_traffic_graph_win.php @@ -266,7 +266,7 @@ $table->data[] = $data; $table->rowclass[] = ''; $form_table = html_print_table($table, true); -$form_table .= '
'; +$form_table .= '
'; $form_table .= html_print_submit_button( __('Reload'), 'submit', diff --git a/pandora_console/operation/agentes/pandora_networkmap.view.php b/pandora_console/operation/agentes/pandora_networkmap.view.php index c4958378c1..09baf79f6b 100644 --- a/pandora_console/operation/agentes/pandora_networkmap.view.php +++ b/pandora_console/operation/agentes/pandora_networkmap.view.php @@ -265,7 +265,7 @@ if (is_ajax()) { $return['correct'] = true; $return['content'] = '
- +
'; diff --git a/pandora_console/operation/agentes/stat_win.php b/pandora_console/operation/agentes/stat_win.php index ae0ee14c78..aa9dc6e68f 100644 --- a/pandora_console/operation/agentes/stat_win.php +++ b/pandora_console/operation/agentes/stat_win.php @@ -386,7 +386,7 @@ ui_print_message_dialog( ); $form_table = html_print_table($table, true); - $form_table .= '
'; + $form_table .= '
'; $form_table .= html_print_submit_button( __('Reload'), 'submit', diff --git a/pandora_console/operation/events/events.build_table.php b/pandora_console/operation/events/events.build_table.php index c37ae43f39..b241cbcf16 100644 --- a/pandora_console/operation/events/events.build_table.php +++ b/pandora_console/operation/events/events.build_table.php @@ -994,7 +994,7 @@ if ($group_rep == 2) { if (check_acl($config['id_user'], 0, 'EW')) { if ($config['event_replication'] != 1) { - echo '
'; + echo '
'; echo ''; html_print_select($array_events_actions, 'response_id', '', '', '', 0, false, false, false); echo '  '; diff --git a/pandora_console/operation/reporting/reporting_viewer.php b/pandora_console/operation/reporting/reporting_viewer.php index e49c2ae41d..5434553aea 100755 --- a/pandora_console/operation/reporting/reporting_viewer.php +++ b/pandora_console/operation/reporting/reporting_viewer.php @@ -238,7 +238,7 @@ if (reporting_get_description($id_report)) { $table->data[0][1] = '
'.reporting_get_name($id_report).'
'; } -$table->data[0][1] .= '
'.__('Set initial date').html_print_checkbox('enable_init_date', 1, $enable_init_date, true); +$table->data[0][1] .= '
'.__('Set initial date').html_print_checkbox('enable_init_date', 1, $enable_init_date, true); $html_enterprise = enterprise_hook( 'reporting_print_button_PDF', [$id_report] diff --git a/pandora_plugins/message_app_connectors/.vscode/settings.json b/pandora_plugins/message_app_connectors/.vscode/settings.json index dd432a8cda..cf160325ad 100644 --- a/pandora_plugins/message_app_connectors/.vscode/settings.json +++ b/pandora_plugins/message_app_connectors/.vscode/settings.json @@ -1,3 +1,3 @@ { - "python.pythonPath": "slack/venv/bin/python" -} \ No newline at end of file + "python.pythonPath": "slack/venv/bin/python" +} From e46845e864ac3b246188c6ab7b9395d2a5644414 Mon Sep 17 00:00:00 2001 From: artica Date: Sat, 27 Mar 2021 01:00:19 +0100 Subject: [PATCH 46/49] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index 74e958a2b9..a0ce0f4673 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.752-210326 +Version: 7.0NG.752-210327 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index f5f595c814..c4feb9ae6e 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.752-210326" +pandora_version="7.0NG.752-210327" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 49b99da877..9c8e488167 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -1016,7 +1016,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.752'; -use constant AGENT_BUILD => '210326'; +use constant AGENT_BUILD => '210327'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index bccc67d858..65f9a5e27e 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.752 -%define release 210326 +%define release 210327 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index e559d828a4..7d8ba70494 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.752 -%define release 210326 +%define release 210327 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 368d010da6..2bbfdc90f1 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.752" -PI_BUILD="210326" +PI_BUILD="210327" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index b095e3f68c..7dfff177ad 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{210326} +{210327} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index fc197541cf..70431038fd 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.752(Build 210326)") +#define PANDORA_VERSION ("7.0NG.752(Build 210327)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index a237f273a3..62d3c3accd 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.752(Build 210326))" + VALUE "ProductVersion", "(7.0NG.752(Build 210327))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index ecefe2996f..9b8ecc5f12 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.752-210326 +Version: 7.0NG.752-210327 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index c0d782e0f7..7409dd40ef 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.752-210326" +pandora_version="7.0NG.752-210327" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index 5961354d1b..cee4fc96da 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC210326'; +$build_version = 'PC210327'; $pandora_version = 'v7.0NG.752'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index c2203c6bbc..d056bd028a 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@
[ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index f0fd1399bd..d929066818 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.752 -%define release 210326 +%define release 210327 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index baead7882a..672abf7b2b 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.752 -%define release 210326 +%define release 210327 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 7c19ac3e5a..13188af12c 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.752" -PI_BUILD="210326" +PI_BUILD="210327" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 0eaca24fd2..2a32248b4e 100755 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -35,7 +35,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.752 PS210326"; +my $version = "7.0NG.752 PS210327"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 8cce69d1c2..9d8fbfc789 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.752 PS210326"; +my $version = "7.0NG.752 PS210327"; # save program name for logging my $progname = basename($0); From cf78261d0bb3716498ad7282e6440bfe43d717c8 Mon Sep 17 00:00:00 2001 From: artica Date: Sun, 28 Mar 2021 01:00:14 +0100 Subject: [PATCH 47/49] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index a0ce0f4673..db4add0430 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.752-210327 +Version: 7.0NG.752-210328 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index c4feb9ae6e..f97863351a 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.752-210327" +pandora_version="7.0NG.752-210328" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 9c8e488167..9fc01abd12 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -1016,7 +1016,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.752'; -use constant AGENT_BUILD => '210327'; +use constant AGENT_BUILD => '210328'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 65f9a5e27e..7f4e1cfe62 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.752 -%define release 210327 +%define release 210328 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index 7d8ba70494..c60b359649 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.752 -%define release 210327 +%define release 210328 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 2bbfdc90f1..5759aeadf7 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.752" -PI_BUILD="210327" +PI_BUILD="210328" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index 7dfff177ad..e9f700bf2a 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{210327} +{210328} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index 70431038fd..fd980be6a8 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.752(Build 210327)") +#define PANDORA_VERSION ("7.0NG.752(Build 210328)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 62d3c3accd..681edf9a9d 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.752(Build 210327))" + VALUE "ProductVersion", "(7.0NG.752(Build 210328))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index 9b8ecc5f12..d291f030c1 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.752-210327 +Version: 7.0NG.752-210328 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 7409dd40ef..42f41241dd 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.752-210327" +pandora_version="7.0NG.752-210328" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index cee4fc96da..b1ca7fbc68 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC210327'; +$build_version = 'PC210328'; $pandora_version = 'v7.0NG.752'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index d056bd028a..966cd4fc95 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@
[ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index d929066818..88d54c964d 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.752 -%define release 210327 +%define release 210328 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 672abf7b2b..169072553f 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.752 -%define release 210327 +%define release 210328 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 13188af12c..56d652d60c 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.752" -PI_BUILD="210327" +PI_BUILD="210328" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 2a32248b4e..7386f43e72 100755 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -35,7 +35,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.752 PS210327"; +my $version = "7.0NG.752 PS210328"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 9d8fbfc789..b6f61dbeb5 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.752 PS210327"; +my $version = "7.0NG.752 PS210328"; # save program name for logging my $progname = basename($0); From 3e8214850f707660795f760ab1184c5f3fd73d7d Mon Sep 17 00:00:00 2001 From: artica Date: Mon, 29 Mar 2021 01:00:18 +0200 Subject: [PATCH 48/49] Auto-updated build strings. --- pandora_agents/unix/DEBIAN/control | 2 +- pandora_agents/unix/DEBIAN/make_deb_package.sh | 2 +- pandora_agents/unix/pandora_agent | 2 +- pandora_agents/unix/pandora_agent.redhat.spec | 2 +- pandora_agents/unix/pandora_agent.spec | 2 +- pandora_agents/unix/pandora_agent_installer | 2 +- pandora_agents/win32/installer/pandora.mpi | 2 +- pandora_agents/win32/pandora.cc | 2 +- pandora_agents/win32/versioninfo.rc | 2 +- pandora_console/DEBIAN/control | 2 +- pandora_console/DEBIAN/make_deb_package.sh | 2 +- pandora_console/include/config_process.php | 2 +- pandora_console/install.php | 2 +- pandora_console/pandora_console.redhat.spec | 2 +- pandora_console/pandora_console.rhel7.spec | 2 +- pandora_console/pandora_console.spec | 2 +- pandora_server/DEBIAN/control | 2 +- pandora_server/DEBIAN/make_deb_package.sh | 2 +- pandora_server/lib/PandoraFMS/Config.pm | 2 +- pandora_server/lib/PandoraFMS/PluginTools.pm | 2 +- pandora_server/pandora_server.redhat.spec | 2 +- pandora_server/pandora_server.spec | 2 +- pandora_server/pandora_server_installer | 2 +- pandora_server/util/pandora_db.pl | 2 +- pandora_server/util/pandora_manage.pl | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control index db4add0430..bc1e8c76e3 100644 --- a/pandora_agents/unix/DEBIAN/control +++ b/pandora_agents/unix/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-agent-unix -Version: 7.0NG.752-210328 +Version: 7.0NG.752-210329 Architecture: all Priority: optional Section: admin diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh index f97863351a..70760911c6 100644 --- a/pandora_agents/unix/DEBIAN/make_deb_package.sh +++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.752-210328" +pandora_version="7.0NG.752-210329" echo "Test if you has the tools for to make the packages." whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index 9fc01abd12..4819f9a704 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -1016,7 +1016,7 @@ my $Sem = undef; my $ThreadSem = undef; use constant AGENT_VERSION => '7.0NG.752'; -use constant AGENT_BUILD => '210328'; +use constant AGENT_BUILD => '210329'; # Agent log default file size maximum and instances use constant DEFAULT_MAX_LOG_SIZE => 600000; diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec index 7f4e1cfe62..bcb0c1530c 100644 --- a/pandora_agents/unix/pandora_agent.redhat.spec +++ b/pandora_agents/unix/pandora_agent.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.752 -%define release 210328 +%define release 210329 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec index c60b359649..b60f4771f7 100644 --- a/pandora_agents/unix/pandora_agent.spec +++ b/pandora_agents/unix/pandora_agent.spec @@ -3,7 +3,7 @@ # %define name pandorafms_agent_unix %define version 7.0NG.752 -%define release 210328 +%define release 210329 Summary: Pandora FMS Linux agent, PERL version Name: %{name} diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer index 5759aeadf7..14cbb78269 100755 --- a/pandora_agents/unix/pandora_agent_installer +++ b/pandora_agents/unix/pandora_agent_installer @@ -10,7 +10,7 @@ # ********************************************************************** PI_VERSION="7.0NG.752" -PI_BUILD="210328" +PI_BUILD="210329" OS_NAME=`uname -s` FORCE=0 diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi index e9f700bf2a..bffcc75c80 100644 --- a/pandora_agents/win32/installer/pandora.mpi +++ b/pandora_agents/win32/installer/pandora.mpi @@ -186,7 +186,7 @@ UpgradeApplicationID {} Version -{210328} +{210329} ViewReadme {Yes} diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc index fd980be6a8..a5306709fa 100644 --- a/pandora_agents/win32/pandora.cc +++ b/pandora_agents/win32/pandora.cc @@ -30,7 +30,7 @@ using namespace Pandora; using namespace Pandora_Strutils; #define PATH_SIZE _MAX_PATH+1 -#define PANDORA_VERSION ("7.0NG.752(Build 210328)") +#define PANDORA_VERSION ("7.0NG.752(Build 210329)") string pandora_path; string pandora_dir; diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc index 681edf9a9d..c1c2744f72 100644 --- a/pandora_agents/win32/versioninfo.rc +++ b/pandora_agents/win32/versioninfo.rc @@ -11,7 +11,7 @@ BEGIN VALUE "LegalCopyright", "Artica ST" VALUE "OriginalFilename", "PandoraAgent.exe" VALUE "ProductName", "Pandora FMS Windows Agent" - VALUE "ProductVersion", "(7.0NG.752(Build 210328))" + VALUE "ProductVersion", "(7.0NG.752(Build 210329))" VALUE "FileVersion", "1.0.0.0" END END diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control index d291f030c1..22d1b9d6fb 100644 --- a/pandora_console/DEBIAN/control +++ b/pandora_console/DEBIAN/control @@ -1,5 +1,5 @@ package: pandorafms-console -Version: 7.0NG.752-210328 +Version: 7.0NG.752-210329 Architecture: all Priority: optional Section: admin diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh index 42f41241dd..deb90ee329 100644 --- a/pandora_console/DEBIAN/make_deb_package.sh +++ b/pandora_console/DEBIAN/make_deb_package.sh @@ -14,7 +14,7 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -pandora_version="7.0NG.752-210328" +pandora_version="7.0NG.752-210329" package_pear=0 package_pandora=1 diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php index b1ca7fbc68..82c2303620 100644 --- a/pandora_console/include/config_process.php +++ b/pandora_console/include/config_process.php @@ -20,7 +20,7 @@ /** * Pandora build version and version */ -$build_version = 'PC210328'; +$build_version = 'PC210329'; $pandora_version = 'v7.0NG.752'; // Do not overwrite default timezone set if defined. diff --git a/pandora_console/install.php b/pandora_console/install.php index 966cd4fc95..53b9a8e021 100644 --- a/pandora_console/install.php +++ b/pandora_console/install.php @@ -129,7 +129,7 @@
[ qw() ] ); diff --git a/pandora_server/pandora_server.redhat.spec b/pandora_server/pandora_server.redhat.spec index 88d54c964d..ac998936cd 100644 --- a/pandora_server/pandora_server.redhat.spec +++ b/pandora_server/pandora_server.redhat.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.752 -%define release 210328 +%define release 210329 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server.spec b/pandora_server/pandora_server.spec index 169072553f..d30cba1bea 100644 --- a/pandora_server/pandora_server.spec +++ b/pandora_server/pandora_server.spec @@ -3,7 +3,7 @@ # %define name pandorafms_server %define version 7.0NG.752 -%define release 210328 +%define release 210329 Summary: Pandora FMS Server Name: %{name} diff --git a/pandora_server/pandora_server_installer b/pandora_server/pandora_server_installer index 56d652d60c..44ba66aa3f 100755 --- a/pandora_server/pandora_server_installer +++ b/pandora_server/pandora_server_installer @@ -9,7 +9,7 @@ # ********************************************************************** PI_VERSION="7.0NG.752" -PI_BUILD="210328" +PI_BUILD="210329" MODE=$1 if [ $# -gt 1 ]; then diff --git a/pandora_server/util/pandora_db.pl b/pandora_server/util/pandora_db.pl index 7386f43e72..d59aab5383 100755 --- a/pandora_server/util/pandora_db.pl +++ b/pandora_server/util/pandora_db.pl @@ -35,7 +35,7 @@ use PandoraFMS::Config; use PandoraFMS::DB; # version: define current version -my $version = "7.0NG.752 PS210328"; +my $version = "7.0NG.752 PS210329"; # Pandora server configuration my %conf; diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index b6f61dbeb5..8905360621 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -36,7 +36,7 @@ use Encode::Locale; Encode::Locale::decode_argv; # version: define current version -my $version = "7.0NG.752 PS210328"; +my $version = "7.0NG.752 PS210329"; # save program name for logging my $progname = basename($0); From 88f3ce9b90de0c1a18006aafca46a4aa7e4a8d57 Mon Sep 17 00:00:00 2001 From: marcos Date: Mon, 29 Mar 2021 08:12:54 +0200 Subject: [PATCH 49/49] fixed lost icons --- .../include/class/OrderInterpreter.class.php | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pandora_console/include/class/OrderInterpreter.class.php b/pandora_console/include/class/OrderInterpreter.class.php index 697227f58c..947c70c953 100644 --- a/pandora_console/include/class/OrderInterpreter.class.php +++ b/pandora_console/include/class/OrderInterpreter.class.php @@ -104,7 +104,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Tactical View'), 'icon' => ui_get_full_url( - 'images/op_monitoring.menu_gray.png' + 'images/menu/op_monitoring.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=view&sec2=operation/agentes/tactical' @@ -122,7 +122,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Agent Management'), 'icon' => ui_get_full_url( - 'images/gm_resources.menu_gray.png' + 'images/menu/gm_resources.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=gagente&sec2=godmode/agentes/modificar_agente' @@ -140,7 +140,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('General Setup'), 'icon' => ui_get_full_url( - 'images/gm_setup.menu_gray.png' + 'images/menu/gm_setup.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=general&sec2=godmode/setup/setup§ion=general' @@ -156,7 +156,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Manage Policies'), 'icon' => ui_get_full_url( - 'images/gm_configuration.menu_gray.png' + 'images/menu/gm_configuration.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=gmodules&sec2=enterprise/godmode/policies/policies' @@ -170,7 +170,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('List Alerts'), 'icon' => ui_get_full_url( - 'images/gm_alerts.menu_gray.png' + 'images/menu/gm_alerts.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=galertas&sec2=godmode/alerts/alert_list' @@ -194,7 +194,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('View Events'), 'icon' => ui_get_full_url( - 'images/op_events.menu_gray.png' + 'images/menu/op_events.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=eventos&sec2=operation/events/events' @@ -218,7 +218,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Dashboard'), 'icon' => ui_get_full_url( - 'images/op_reporting.menu_gray.png' + 'images/menu/op_reporting.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=reporting&sec2=operation/dashboard/dashboard' @@ -232,7 +232,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Visual Console'), 'icon' => ui_get_full_url( - 'images/op_network.menu_gray.png' + 'images/menu/op_network.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=network&sec2=godmode/reporting/map_builder' @@ -246,7 +246,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Manage Servers'), 'icon' => ui_get_full_url( - 'images/gm_servers.menu_gray.png' + 'images/menu/gm_servers.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=gservers&sec2=godmode/servers/modificar_server' @@ -260,7 +260,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Edit User'), 'icon' => ui_get_full_url( - 'images/gm_users.menu_gray.png' + 'images/menu/gm_users.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=workspace&sec2=operation/users/user_edit' @@ -270,7 +270,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Tree View'), 'icon' => ui_get_full_url( - 'images/op_monitoring.menu_gray.png' + 'images/menu/op_monitoring.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=view&sec2=operation/tree' @@ -280,7 +280,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Network Component'), 'icon' => ui_get_full_url( - 'images/gm_configuration.menu_gray.png' + 'images/menu/gm_configuration.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=gmodules&sec2=godmode/modules/manage_network_components' @@ -294,7 +294,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Task List'), 'icon' => ui_get_full_url( - 'images/gm_discovery.menu.png' + 'images/menu/gm_discovery.menu.png' ), 'url' => ui_get_full_url( 'index.php?sec=discovery&sec2=godmode/servers/discovery&wiz=tasklist' @@ -338,7 +338,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Update Manager'), 'icon' => ui_get_full_url( - 'images/um_messages.menu_gray.png' + 'images/menu/um_messages.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=messages&sec2=godmode/update_manager/update_manager&tab=setup' @@ -352,7 +352,7 @@ class OrderInterpreter extends Wizard [ 'name' => __('Manage Agent Groups'), 'icon' => ui_get_full_url( - 'images/gm_users.menu_gray.png' + 'images/menu/gm_users.menu_gray.png' ), 'url' => ui_get_full_url( 'index.php?sec=gagente&sec2=godmode/groups/group_list&tab=groups'