lib/fluent/plugin/statusz.rb in fluent-plugin-google-cloud-0.7.15 vs lib/fluent/plugin/statusz.rb in fluent-plugin-google-cloud-0.7.16
- old
+ new
@@ -10,22 +10,118 @@
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+require 'erb'
+
# Module for collecting diagnostic information and formatting it as an
# HTML page to serve on the /statusz endpoint.
module Statusz
module_function
- def response
- # TODO(davidbtucker): Add more status information here.
- [
- '<html>',
- '<body>',
- '<h1>Status</h1>',
- "<b>Command-line flags:</b> #{CGI.escapeHTML(ARGV.join(' '))}",
- '</body>',
- '</html>'
- ].join("\n") + "\n"
+ # Note: The plugin parameter is referenced in STATUSZ_TMPL.
+ def response(plugin)
+ uptime = Time.now - SERVER_START
+ uptime_str = format('%d hr %02d min %02d sec',
+ uptime / 3600,
+ (uptime / 60) % 60,
+ uptime % 60)
+ ERB.new(STATUSZ_TMPL).result(binding)
end
end
+
+SERVER_START = Time.now
+
+# Does not include the following deprecated config params:
+# auth_method, private_key_email, private_key_passphrase, private_key_path
+CONFIG_KEYS = %w(
+ adjust_invalid_timestamps
+ autoformat_stackdriver_trace
+ coerce_to_utf8
+ detect_json
+ detect_subservice
+ enable_metadata_agent
+ enable_monitoring
+ http_request_key
+ insert_id_key
+ k8s_cluster_location
+ k8s_cluster_name
+ kubernetes_tag_regexp
+ label_map
+ labels_key
+ labels
+ logging_api_url
+ metadata_agent_url
+ monitoring_type
+ non_utf8_replacement_string
+ operation_key
+ partial_success
+ project_id
+ require_valid_tags
+ source_location_key
+ span_id_key
+ split_logs_by_tag
+ statusz_port
+ subservice_name
+ trace_key
+ trace_sampled_key
+ use_aws_availability_zone
+ use_grpc
+ use_metadata_service
+ vm_id
+ vm_name
+ zone
+).freeze
+
+# rubocop:disable LineLength
+STATUSZ_TMPL = %(\
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Status for <%= File.basename($PROGRAM_NAME) %></title>
+ <style>
+ body {
+ font-family: sans-serif;
+ }
+ h1 {
+ clear: both;
+ width: 100%;
+ text-align: center;
+ font-size: 120%;
+ background: #eef;
+ }
+ .lefthand {
+ float: left;
+ width: 80%;
+ }
+ .righthand {
+ text-align: right;
+ }
+ td, th {
+ background-color: rgba(0, 0, 0, 0.05);
+ }
+ th {
+ text-align: left;
+ }
+ </style>
+ </head>
+
+ <body>
+ <h1>Status for <%= File.basename($PROGRAM_NAME) %></h1>
+
+ <div>
+ <div class="lefthand">
+ Started: <%= SERVER_START %><br>
+ Up <%= uptime_str %><br>
+ </div>
+ </div>
+
+ <h1>Parsed configuration</h1>
+
+ <table>
+#{CONFIG_KEYS.map { |k| " <tr><th>#{k}</th><td><%= plugin.#{k} %></td></tr>" }.join("\n")}
+ </table>
+ </body>
+</html>
+).freeze
+# rubocop:enable LineLength