Sha256: f96c974e30b6a6ec994d099ece6b0ba2b0c071cb4fff096d7bbd3e79fb020130

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

module MissionControl::Servers
  class ScriptsController < ApplicationController
    before_action :set_project

    def show
      head :not_found and return unless @project
      response.content_type = 'text/plain'

      # Render the script directly or from a file
      render plain: script_content
    end

    private
      # Use callbacks to share common setup or constraints between actions.
      def set_project
        @project = Project.find_by(token: params[:project_id])
      end

      def script_content
        <<~SCRIPT
        cat <<'EOF' > metrics.sh
        #!/bin/bash

        endpoint="#{project_ingress_url(@project.token)}"
        cpu_usage=$(vmstat 1 5 | awk 'NR==4 {print 100 - $15}')
        mem_used=$(free -m | awk '/^Mem:/ {print $3}')
        mem_free=$(free -m | awk '/^Mem:/ {print $7}')
        disk_free=$(df -h | awk 'NF=="/"{print $4}')
        hostname=$(hostname)

        data="service[cpu]=$cpu_usage"
        data+="&service[mem_used]=$mem_used"
        data+="&service[mem_free]=$mem_free"
        data+="&service[disk_free]=$disk_free"
        data+="&service[hostname]=$hostname"

        curl -X POST $endpoint -d $data
        EOF

        chmod +x metrics.sh

        cron_job="* * * * * $(pwd)/metrics.sh"
        (crontab -l 2>/dev/null | grep -v -F "$cron_job"; echo "$cron_job") | crontab -
        SCRIPT
      end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mission_control-servers-0.1.0 app/controllers/mission_control/servers/scripts_controller.rb