Sha256: 68fa00126b6af2869e243cc4f72661fab9dd48343d7ab6333c810231abe09c9e

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 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="$data&service[mem_used]=$mem_used"
        data="$data&service[mem_free]=$mem_free"
        data="$data&service[disk_free]=$disk_free"
        data="$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

2 entries across 2 versions & 1 rubygems

Version Path
mission_control-servers-0.1.3 app/controllers/mission_control/servers/scripts_controller.rb
mission_control-servers-0.1.2 app/controllers/mission_control/servers/scripts_controller.rb