diff --git a/app/jobs/scheduled/daily_performance_report.rb b/app/jobs/scheduled/daily_performance_report.rb new file mode 100644 index 00000000000..4ddfd9b0eba --- /dev/null +++ b/app/jobs/scheduled/daily_performance_report.rb @@ -0,0 +1,48 @@ +module Jobs + class DailyPerformanceReport < Jobs::Scheduled + every 1.day + per_host + + def execute(args) + if SiteSetting.daily_performance_report + result = `ruby #{Rails.root}/script/nginx_analyze.rb --limit 1440` + if result.strip.empty? + result = "Report is only available in latest image, please run: \n\n cd /var/discourse && ./launcher rebuild app" + end + report_data = "```text\n#{result}\n```" + + PostCreator.create(Discourse.system_user, + topic_id: performance_topic_id, + raw: report_data, + skip_validations: true) + + end + end + + def performance_topic_id + + if SiteSetting.performance_report_topic_id > 0 + topic = Topic.find_by(id: SiteSetting.performance_report_topic_id) + return topic.id if topic + end + + staff_category = Category.find_by(id: SiteSetting.staff_category_id) + raise StandardError, "Staff category was not found" unless staff_category + + post = PostCreator.create(Discourse.system_user, + raw: I18n.t('performance_report.initial_post_raw'), + category: staff_category.name, + title: I18n.t('performance_report.initial_topic_title'), + skip_validations: true) + + + unless post && post.topic_id + raise StandardError, "Could not create or retrieve performance report topic id" + end + + SiteSetting.performance_report_topic_id = post.topic_id + + end + + end +end diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 90feff208d9..7aaa743fb51 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1119,6 +1119,9 @@ en: enable_mobile_theme: "Mobile devices use a mobile-friendly theme, with the ability to switch to the full site. Disable this if you want to use a custom stylesheet that is fully responsive." dominating_topic_minimum_percent: "What percentage of posts a user has to make in a topic before being reminded about overly dominating a topic." + + daily_performance_report: "Analyze NGINX logs daily and post a Staff Only topic with details" + suppress_uncategorized_badge: "Don't show the badge for uncategorized topics in topic lists." global_notice: "Display an URGENT, EMERGENCY global banner notice to all visitors, change to blank to hide it (HTML allowed)." @@ -2503,3 +2506,7 @@ en: discourse_hub: access_token_problem: "Tell an admin: Please update the site settings to include the correct discourse_org_access_key." + + performance_report: + initial_post_raw: This topic includes daily performance reports for your site. + initial_topic_title: Website performance reports diff --git a/config/site_settings.yml b/config/site_settings.yml index fa7ddf00795..482413bc2fc 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -870,6 +870,9 @@ uncategorized: sequential_replies_threshold: 2 dominating_topic_minimum_percent: 20 + # Reporting + daily_performance_report: false + global_notice: default: "" client: true @@ -881,13 +884,19 @@ uncategorized: lounge_category_id: default: -1 hidden: true + meta_category_id: default: -1 hidden: true + staff_category_id: default: -1 hidden: true + performance_report_topic_id: + default: -1 + hidden: true + notify_about_flags_after: 48 enable_cdn_js_debugging: false