- expand sended stats with sendAverageUptime(duration)
- Display 24h, 7d, 30d, 90d average uptime of all monitors
- Change Uptime.vue component to support displaying average uptime of all monitors
Issue #312
// Handle if heartbeat duration longer than the target duration
// e.g. If the last beat's duration is bigger that the 24hrs window, it will use the duration between the (beat time - window margin) (THEN case in SQL)
// JOIN is necessary, because heartbeat has still data of deleted monitors.
// Handle new monitor with only one beat, because the beat's duration = 0
letresult=awaitR.getRow("SELECT SUM(`status`) AS up_monitor, COUNT(`status`) AS sum_monitor FROM heartbeat JOIN monitor on monitor.id == heartbeat.monitor_id");
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
"Clear all statistics":"Wyczyść wszystkie statystyki",
"Clear all statistics":"Wyczyść wszystkie statystyki",
retryCheckEverySecond:"Retry every {0} seconds.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
enableDefaultNotificationDescription:"For every new monitor this notification will be enabled by default. You can still disable the notification separately for each monitor.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
twoFAVerifyLabel:"Please type in your token to verify that 2FA is working",
tokenValidSettingsMsg:"Token is valid! You can now save the 2FA settings.",
confirmEnableTwoFAMsg:"Are you sure you want to enable 2FA?",
confirmDisableTwoFAMsg:"Are you sure you want to disable 2FA?",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",
importHandleDescription:"Choose 'Skip existing' if you want to skip every monitor or notification with the same name. 'Overwrite' will delete every existing monitor and notification.",
confirmImportMsg:"Are you sure to import the backup? Please make sure you've selected the right import option.",