module Jobs
  class DailyPerformanceReport < Jobs::Scheduled
    every 1.day
    per_host

    def execute(args)
      if SiteSetting.daily_performance_report &&
         RailsMultisite::ConnectionManagement.current_db == "default"
        result = `ruby #{Rails.root}/plugins/discourse-nginx-performance-report/script/nginx_analyze.rb --limit 1440`

        report_data =
          if result.strip.empty?
            <<~TEXT
            Report is only available in latest image, please run:

            ```text
            cd /var/discourse
            ./launcher rebuild app
            ```
            TEXT
          else
            "```text\n#{result}\n```"
          end

        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
