diff --git a/front/php/server/util.php b/front/php/server/util.php index 466352ec..4b6d9daf 100755 --- a/front/php/server/util.php +++ b/front/php/server/util.php @@ -202,7 +202,7 @@ function cleanLog($logFile) $path = ""; - $allowedFiles = ['pialert.log', 'pialert_front.log', 'IP_changes.log', 'stdout.log', 'stderr.log', "pialert_pholus_lastrun.log"]; + $allowedFiles = ['pialert.log', 'pialert_front.log', 'IP_changes.log', 'stdout.log', 'stderr.log', "pialert_pholus_lastrun.log", 'pialert.php_errors.log']; if(in_array($logFile, $allowedFiles)) { @@ -365,10 +365,39 @@ function encode_single_quotes ($val) { // ------------------------------------------------------------------------------------------- function getDateFromPeriod () { - $period = $_REQUEST['period']; - return '"'. date ('Y-m-d', strtotime ('+2 day -'. $period) ) .'"'; + + $periodDate = $_REQUEST['period']; + + $periodDateSQL = ""; + $days = ""; + + switch ($periodDate) { + case '7 days': + $days = "7"; + break; + case '1 month': + $days = "30"; + break; + case '1 year': + $days = "365"; + break; + case '100 years': + $days = "3650"; //10 years + break; + default: + $days = "1"; + } + + $periodDateSQL = "-".$days." day"; + + return " date('now', '".$periodDateSQL."') "; + + // $period = $_REQUEST['period']; + // return '"'. date ('Y-m-d', strtotime ('+2 day -'. $period) ) .'"'; } + + // ------------------------------------------------------------------------------------------- function quotes ($text) { return str_replace ('"','""',$text); diff --git a/front/php/templates/language/en_us.json b/front/php/templates/language/en_us.json index e5f0bca8..b556ce54 100755 --- a/front/php/templates/language/en_us.json +++ b/front/php/templates/language/en_us.json @@ -492,7 +492,7 @@ "WEBHOOK_REQUEST_METHOD_name" : "Request method", "WEBHOOK_REQUEST_METHOD_description" : "The HTTP request method to be used for the webhook call.", "WEBHOOK_SIZE_name" : "Max payload size", - "WEBHOOK_SIZE_description" : "The maximum size of the webhook payload as number of characters in the passed string. If above limit, it will be truncated and a (text was truncated) message is appended.", + "WEBHOOK_SIZE_description" : "The maximum size of the webhook payload as number of characters in the passed string. If above limit, it will be truncated and a (text was truncated) message is appended.", "Apprise_display_name" : "Apprise", "Apprise_icon" : "", "REPORT_APPRISE_name" : "Enable Apprise", @@ -501,6 +501,8 @@ "APPRISE_HOST_description" : "Apprise host URL starting with http:// or https://. (don not forget to include /notify at the end)", "APPRISE_URL_name" : "Apprise notification URL", "APPRISE_URL_description" : "Apprise notification target URL. For example for Telegram it would be tgram://{bot_token}/{chat_id}.", + "APPRISE_SIZE_name" : "Max payload size", + "APPRISE_SIZE_description" : "The maximum size of the apprise payload as number of characters in the passed string. If above limit, it will be truncated and a (text was truncated) message is appended.", "NTFY_display_name" : "NTFY", "NTFY_icon" : "", "REPORT_NTFY_name" : "Enable NTFY", diff --git a/front/plugins/plugin_helper.py b/front/plugins/plugin_helper.py index 7072d4f7..0643391c 100755 --- a/front/plugins/plugin_helper.py +++ b/front/plugins/plugin_helper.py @@ -14,7 +14,9 @@ def read_config_file(): print('[plugin_helper] reading config file') # load the variables from pialert.conf - code = compile(filename.read_text(), filename.name, "exec") + with open(filename, "r") as file: + code = compile(file.read(), filename, "exec") + confDict = {} # config dictionary exec(code, {"__builtins__": {}}, confDict) return confDict diff --git a/pialert/initialise.py b/pialert/initialise.py index a0d4eaee..38991ed3 100755 --- a/pialert/initialise.py +++ b/pialert/initialise.py @@ -124,6 +124,7 @@ def importConfigs (db): conf.APPRISE_HOST = ccd('APPRISE_HOST', '' , c_d, 'Apprise host URL', 'text', '', 'Apprise') conf.APPRISE_URL = ccd('APPRISE_URL', '' , c_d, 'Apprise notification URL', 'text', '', 'Apprise') conf.APPRISE_PAYLOAD = ccd('APPRISE_PAYLOAD', 'html' , c_d, 'Payload type', 'text.select', "['html', 'text']", 'Apprise') + conf.APPRISE_SIZE = ccd('APPRISE_SIZE', 1024 , c_d, 'Payload size', 'integer', '', 'Apprise') # NTFY conf.REPORT_NTFY = ccd('REPORT_NTFY', False , c_d, 'Enable NTFY', 'boolean', '', 'NTFY', ['test']) diff --git a/pialert/plugin.py b/pialert/plugin.py index 5b9b4280..e50042dd 100755 --- a/pialert/plugin.py +++ b/pialert/plugin.py @@ -23,6 +23,7 @@ class plugins_state: def run_plugin_scripts(db, runType, pluginsState = None): if pluginsState == None: + mylog('debug', ['[Plugins] pluginsState initialized ']) pluginsState = plugins_state() # Header @@ -615,8 +616,6 @@ def process_plugin_events(db, plugin, pluginsState): db.commitDB() - - return pluginsState diff --git a/pialert/publishers/apprise.py b/pialert/publishers/apprise.py index b497147b..148e9036 100755 --- a/pialert/publishers/apprise.py +++ b/pialert/publishers/apprise.py @@ -18,34 +18,45 @@ def send(msg: noti_struc): html = msg.html text = msg.text - # Define Apprise compatible payload (https://github.com/caronc/apprise-api#stateless-solution) - payload = html + payloadData = '' - if conf.APPRISE_PAYLOAD == 'text': - payload = text + # limit = 1024 * 1024 # 1MB limit (1024 bytes * 1024 bytes = 1MB) + limit = conf.APPRISE_SIZE + + # truncate size + if conf.APPRISE_PAYLOAD == 'html': + if len(msg.html) > limit: + payloadData = msg.html[:limit] + "

(text was truncated)

" + else: + payloadData = msg.html + if conf.APPRISE_PAYLOAD == 'text': + if len(msg.text) > limit: + payloadData = msg.text[:limit] + " (text was truncated)" + else: + payloadData = msg.text + + # Define Apprise compatible payload (https://github.com/caronc/apprise-api#stateless-solution) + # payload = html + + # if conf.APPRISE_PAYLOAD == 'text': + # payload = text _json_payload = { "urls": conf.APPRISE_URL, "title": "Pi.Alert Notifications", "format": conf.APPRISE_PAYLOAD, - "body": payload + "body": payloadData } try: - # Construct the curl command with input from the JSON payload - curl_command = [ - "curl", "-i", "-X", "POST", "-H", "Content-Type:application/json", - conf.APPRISE_HOST - ] - - # Run the curl command with the JSON payload as input - completed_process = subprocess.run( - curl_command, input=json.dumps(_json_payload), - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True - ) + # try runnning a subprocess + p = subprocess.Popen(["curl","-i","-X", "POST" ,"-H", "Content-Type:application/json" ,"-d", json.dumps(_json_payload), conf.APPRISE_HOST], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + stdout, stderr = p.communicate() + # write stdout and stderr into .log files for debugging if needed + logResult (stdout, stderr) # TO-DO should be changed to mylog # Log the stdout and stderr - logResult(completed_process.stdout, completed_process.stderr) # TO-DO should be changed to mylog + mylog('debug', [stdout, stderr]) # TO-DO should be changed to mylog except subprocess.CalledProcessError as e: # An error occurred, handle it mylog('none', [e.output]) \ No newline at end of file