mission_control-servers 0.2.5 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5eef0e07ac8fee585155c704088b7cbfcbf9736440ee11af15bd780ce5077664
4
- data.tar.gz: f219f8ee1ddcfbed49ee3f80c0493bab20d433173a4863e6fba4abbca367e713
3
+ metadata.gz: 1634257f311403b05c024937a8f0eeb89cac5070505267251ae75c47ba25ff36
4
+ data.tar.gz: c7fff4907632e22dff943e3699d427968aa3b113044cfc0c3d2cbaccc80e3e42
5
5
  SHA512:
6
- metadata.gz: 062a231db01dff3d63e7b342dabb170184ec5c9ac0421f3f86f3c9981250c54ccd2a7746854abdc6697c2f1241b8eda3d198c68fe8a158f47a8674e5a31bc6cb
7
- data.tar.gz: 060a236e9e8d5651175f328c790fc38fc02689ae01ad7cfb353fd7e589ba9fe35252e54335073dfc4366779f1668e1a446da36a37b862b44cbca5a415606350c
6
+ metadata.gz: 8cc22c21ca4226bfac07425241ca08959e7bb1a8d4e9b72fd1ad222d5939d319050938dce9f15a4af3ce7629bc373dd90e83c4a33d3ba4291cf6f92475961e1e
7
+ data.tar.gz: 640d6852cb5a85c74089dd1f3c99a7c4f67cf14843a7efd81514e9d23770fb7aa480006e8e5ec1879f4f5021e295b4602bc8ce2b28cee14813aaaccbb85ff501
data/README.md CHANGED
@@ -93,14 +93,18 @@ http://localhost:3000/mission_control-servers/projects?interval=30&dark=true&com
93
93
  ## Protecting the Dashboard
94
94
 
95
95
  You can protect the dashboard by using a constraint. This will allow you to only allow certain users to access
96
- the dashboard. However, the ingress still needs to be accessible by the servers which are being monitored.
96
+ the dashboard. However, the ingress still needs to be accessible by the servers which are being monitored. In
97
+ order to install the script on the servers, you also have to expose the endpoint for the script.
97
98
 
98
99
  ```ruby
99
100
  Rails.application.routes.draw do
101
+ get '/mission_control-servers/projects/:project_id/script', to: 'mission_control/servers/scripts#show'
102
+ post '/mission_control-servers/projects/:project_id/ingress', to: 'mission_control/servers/ingresses#create'
103
+
100
104
  constraints AdminConstraint do
101
105
  mount MissionControl::Servers::Engine => "/mission_control-servers"
102
106
  end
103
- post '/mission_control-servers/projects/:project_id/ingress', to: 'mission_control/servers/ingresses#create'
107
+
104
108
  end
105
109
  ```
106
110
 
@@ -2,6 +2,7 @@ module MissionControl::Servers
2
2
  class Dashboards::ProjectTablesController < ApplicationController
3
3
  def show
4
4
  @project = Project.includes(:services).find_by(token: params[:project_id])
5
+ @service_settings = @project.service_settings
5
6
  end
6
7
  end
7
8
  end
@@ -10,6 +10,8 @@ module MissionControl::Servers
10
10
 
11
11
  # GET /projects/1
12
12
  def show
13
+ hostnames = @project.services.pluck(:hostname).uniq
14
+ @service_settings = @project.service_settings.where(hostname: hostnames)
13
15
  @services = if params[:hostname]
14
16
  @project.services.where(hostname: params[:hostname]).group_by(&:hostname)
15
17
  else
@@ -66,7 +68,7 @@ module MissionControl::Servers
66
68
 
67
69
  # Use callbacks to share common setup or constraints between actions.
68
70
  def set_project
69
- @project = Project.find(params[:id])
71
+ @project = Project.includes(:services, :service_settings).find(params[:id])
70
72
  end
71
73
 
72
74
  # Only allow a list of trusted parameters through.
@@ -41,43 +41,43 @@ module MissionControl::Servers
41
41
  fi
42
42
 
43
43
  cat <<'EOF' > metrics.sh
44
- #!/bin/bash
44
+ #!/bin/bash
45
45
 
46
- DEBUG=0
47
- if [[ "$1" == "--debug" ]]; then
48
- DEBUG=1
49
- fi
46
+ DEBUG=0
47
+ if [[ "$1" == "--debug" ]]; then
48
+ DEBUG=1
49
+ fi
50
50
 
51
- debug() {
52
- if [[ $DEBUG -eq 1 ]]; then
53
- echo "Debug: $1"
54
- fi
55
- }
51
+ debug() {
52
+ if [[ $DEBUG -eq 1 ]]; then
53
+ echo "Debug: $1"
54
+ fi
55
+ }
56
56
 
57
- endpoint="#{project_ingress_url(@project.token)}"
58
- cpu_usage=$(vmstat 1 5 | awk 'NR==4 {print 100 - $15}')
59
- mem_used=$(free -m | awk '/^Mem:/ {print $3}')
60
- mem_free=$(free -m | awk '/^Mem:/ {print $7}')
61
- disk_free=$(df -h | awk '$NF=="/"{print $4}')
62
- hostname=$(hostname)
57
+ endpoint="#{project_ingress_url(@project.token)}"
58
+ cpu_usage=$(vmstat 1 5 | awk 'NR==4 {print 100 - $15}')
59
+ mem_used=$(free -m | awk '/^Mem:/ {print $3}')
60
+ mem_free=$(free -m | awk '/^Mem:/ {print $7}')
61
+ disk_free=$(df -h | awk '$NF=="/"{print $4}')
62
+ hostname=$(hostname)
63
63
 
64
- # Debug outputs
65
- debug "CPU Usage: $cpu_usage"
66
- debug "Memory Used: $mem_used MB"
67
- debug "Memory Free: $mem_free MB"
68
- debug "Disk Free: $disk_free"
69
- debug "Hostname: $hostname"
64
+ # Debug outputs
65
+ debug "CPU Usage: $cpu_usage"
66
+ debug "Memory Used: $mem_used MB"
67
+ debug "Memory Free: $mem_free MB"
68
+ debug "Disk Free: $disk_free"
69
+ debug "Hostname: $hostname"
70
70
 
71
- data=$(printf "service[cpu]=%s&service[mem_used]=%s&service[mem_free]=%s&service[disk_free]=%s&service[hostname]=%s" \
72
- "$cpu_usage" "$mem_used" "$mem_free" "$disk_free" "$hostname")
71
+ data=$(printf "service[cpu]=%s&service[mem_used]=%s&service[mem_free]=%s&service[disk_free]=%s&service[hostname]=%s" \
72
+ "$cpu_usage" "$mem_used" "$mem_free" "$disk_free" "$hostname")
73
73
 
74
- debug "Data being sent: $data"
74
+ debug "Data being sent: $data"
75
75
 
76
- if [[ $DEBUG -eq 1 ]]; then
77
- curl -v -X POST "$endpoint" -d "$data"
78
- else
79
- curl -X POST "$endpoint" -d "$data"
80
- fi
76
+ if [[ $DEBUG -eq 1 ]]; then
77
+ curl -v -X POST "$endpoint" -d "$data"
78
+ else
79
+ curl -X POST "$endpoint" -d "$data"
80
+ fi
81
81
  EOF
82
82
 
83
83
  chmod +x metrics.sh
@@ -85,7 +85,7 @@ module MissionControl::Servers
85
85
  cron_job="* * * * * $(pwd)/metrics.sh"
86
86
  (crontab -l 2>/dev/null | grep -v -F "$cron_job"; echo "$cron_job") | crontab -
87
87
  echo "Sending first request to the server..."
88
- $(pwd)/metrics.sh
88
+ bash $(pwd)/metrics.sh
89
89
  echo
90
90
  echo "████████████████████████████████████████████████████████████████████████████"
91
91
  echo "█ █"
@@ -0,0 +1,27 @@
1
+ module MissionControl::Servers
2
+ class ServiceSettingsController < ApplicationController
3
+ def edit
4
+ @project = Project.find(params[:project_id])
5
+ @service_setting = @project.service_settings.find_or_initialize_by(hostname: params[:id])
6
+ @service_setting.label = params[:id] if @service_setting.new_record?
7
+ @service_setting.save # To limit having to have a create action
8
+ end
9
+
10
+ def update
11
+ @project = Project.find(params[:project_id])
12
+ @service_setting = @project.service_settings.find_by(hostname)
13
+ @service_setting.update(label)
14
+ redirect_to projects_path, notice: "Updated Service Settings."
15
+ end
16
+
17
+ private
18
+
19
+ def hostname
20
+ params.require(:service_setting).permit(:hostname)
21
+ end
22
+
23
+ def label
24
+ params.require(:service_setting).permit(:label)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,4 @@
1
+ module MissionControl::Servers
2
+ module ServiceSettingsHelper
3
+ end
4
+ end
@@ -1,6 +1,7 @@
1
1
  module MissionControl::Servers
2
2
  class Project < ApplicationRecord
3
3
  has_many :services, dependent: :destroy
4
+ has_many :service_settings, dependent: :destroy
4
5
  has_secure_token :token
5
6
  end
6
7
  end
@@ -0,0 +1,5 @@
1
+ module MissionControl::Servers
2
+ class ServiceSetting < ApplicationRecord
3
+ belongs_to :project
4
+ end
5
+ end
@@ -6,7 +6,7 @@
6
6
  <dd class="card-heading">Last Seen</dd>
7
7
  <dt class="connected-chart">
8
8
  <%= @service.created_at.strftime("%Y-%-m-%-d") %><br><br>
9
- <%= @service.created_at.strftime("%I:%M:%S %p") %>
9
+ <%= @service.created_at.strftime("%-I:%M:%S %p") %>
10
10
  </dt>
11
11
  </div>
12
12
  <% end %>
@@ -12,6 +12,7 @@
12
12
  <th scope="col" class="hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-normal lg:table-cell">Memory Used %</th>
13
13
  <th scope="col" class="hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-normal lg:table-cell">Memory Free</th>
14
14
  <th scope="col" class="hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-normal lg:table-cell">Disk Free</th>
15
+ <th scope="col" class="hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-normal lg:table-cell">Last Seen</th>
15
16
  <th scope="col" class="relative py-3.5 pl-3 pr-4 sm:pr-6">
16
17
  <span class="sr-only">Select</span>
17
18
  </th>
@@ -21,14 +22,26 @@
21
22
  <% @project.services.group_by(&:hostname).each do |hostname, services| %>
22
23
  <tr>
23
24
  <td class="relative py-4 pl-4 pr-3 text-sm sm:pl-6">
24
- <div class="font-medium text-gray-normal"><%= hostname%></div>
25
+ <div class="font-medium text-gray-normal">
26
+ <% service_setting = @service_settings.find { |s| s.hostname == hostname } %>
27
+ <% if service_setting %>
28
+ <%= service_setting.label %>
29
+ (<%= hostname %>)
30
+ <% else %>
31
+ <%= hostname %>
32
+ <% end %>
33
+ </div>
25
34
  </td>
26
35
  <td class="px-3 py-3.5 text-sm text-gray-light lg:table-cell"><%= services.last.cpu %>%</td>
27
36
  <td class="hidden px-3 py-3.5 text-sm text-gray-light lg:table-cell"><%= number_to_human_size(services.last.mem_used.to_f * 1.megabyte) %></td>
28
37
  <td class="hidden px-3 py-3.5 text-sm text-gray-light lg:table-cell"><%= services.last.mem_percent %>%</td>
29
38
  <td class="hidden px-3 py-3.5 text-sm text-gray-light lg:table-cell"><%= number_to_human_size(services.last.mem_free.to_f * 1.megabyte) %></td>
30
39
  <td class="hidden px-3 py-3.5 text-sm text-gray-light lg:table-cell"><%= services.last.disk_free %></td>
40
+ <td class="hidden px-3 py-3.5 text-sm text-gray-light lg:table-cell">
41
+ <%= services.last.created_at.strftime("%Y-%-m-%-d %-I:%M:%S %p") %>
42
+ </td>
31
43
  <td class="relative py-3.5 pl-3 pr-4 text-right text-sm font-medium sm:pr-6">
44
+ <%= link_to "Settings", edit_project_service_setting_path(@project, id: hostname), target: :_top, class: "btn btn-default" %>
32
45
  <%= link_to "Dashboard", project_path(@project, hostname: hostname), target: :_top, class: "btn btn-default" %>
33
46
  <%= link_to "Remove", project_path(@project, hostname: hostname), data: { "turbo-method": :delete, "turbo-confirm": "Are you sure?" }, class: "btn btn-danger" %>
34
47
  </td>
@@ -17,7 +17,7 @@
17
17
  </div>
18
18
 
19
19
  <div class="mb-6">
20
- <%= form.hidden_field :token %>
20
+ <%= form.hidden_field :hostname %>
21
21
  </div>
22
22
 
23
23
  <div class="flex items-center justify-between">
@@ -54,7 +54,12 @@
54
54
  "data-target": hostname,
55
55
  "data-tabs-target": "link",
56
56
  class: "tab-link flex items-center justify-center #{first_tab_class} #{last_tab_class}" do %>
57
- <%= hostname %>
57
+ <% service_setting = @service_settings.find { |s| s.hostname == hostname } %>
58
+ <% if service_setting %>
59
+ <%= service_setting.label %>
60
+ <% else %>
61
+ <%= hostname %>
62
+ <% end %>
58
63
  <% end %>
59
64
  <% end %>
60
65
  </nav>
@@ -0,0 +1,23 @@
1
+ <div class="lg:flex lg:items-center lg:justify-between">
2
+ <div class="min-w-0 flex-1"></div>
3
+ <div class="mt-5 flex lg:ml-4 lg:mt-0">
4
+ <span class="hidden sm:block">
5
+ <button data-controller="dark-mode" data-action="click->dark-mode#toggle" class="btn btn-default">Dark Mode</button>
6
+ </span>
7
+ </div>
8
+ </div>
9
+
10
+ <div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 my-10">
11
+ <h1 class="text-2xl text-center font-semibold text-gray-normal mb-8">Editing <%= @service_setting.hostname %></h1>
12
+ <%= form_with(model: [@project, @service_setting], class: "max-w-lg mx-auto my-10") do |form| %>
13
+ <%= form.hidden_field :hostname %>
14
+ <div class="mb-4">
15
+ <%= form.label :label, class: "block text-gray-700 text-sm font-bold mb-2" %>
16
+ <%= form.text_field :label, class: "shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline" %>
17
+ </div>
18
+ <div class="flex items-center justify-between">
19
+ <%= form.submit class: "btn btn-primary btn-block" %>
20
+ <%= link_to "Cancel", projects_path, class: "text-gray-light px-4 transition duration-150 ease-in-out" %>
21
+ </div>
22
+ <% end %>
23
+ </div>
data/config/routes.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  MissionControl::Servers::Engine.routes.draw do
2
2
  resources :projects do
3
+ resources :service_settings, only: [:edit, :update]
3
4
  resource :ingress, only: :create
4
5
  resource :script, only: :show
5
6
  namespace :dashboards do
@@ -0,0 +1,11 @@
1
+ class CreateMissionControlServersServiceSettings < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :mission_control_servers_service_settings do |t|
4
+ t.belongs_to :project, null: false, foreign_key: { to_table: :mission_control_servers_projects }
5
+ t.string :hostname
6
+ t.string :label
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  module MissionControl
2
2
  module Servers
3
- VERSION = "0.2.5"
3
+ VERSION = "0.2.8"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mission_control-servers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Kimura
@@ -119,7 +119,9 @@ files:
119
119
  - app/controllers/mission_control/servers/ingresses_controller.rb
120
120
  - app/controllers/mission_control/servers/projects_controller.rb
121
121
  - app/controllers/mission_control/servers/scripts_controller.rb
122
+ - app/controllers/mission_control/servers/service_settings_controller.rb
122
123
  - app/helpers/mission_control/servers/application_helper.rb
124
+ - app/helpers/mission_control/servers/service_settings_helper.rb
123
125
  - app/javascript/mission_control/servers/application.js
124
126
  - app/javascript/mission_control/servers/controllers/application.js
125
127
  - app/javascript/mission_control/servers/controllers/combo_chart_controller.js
@@ -136,6 +138,7 @@ files:
136
138
  - app/models/mission_control/servers/application_record.rb
137
139
  - app/models/mission_control/servers/project.rb
138
140
  - app/models/mission_control/servers/service.rb
141
+ - app/models/mission_control/servers/service_setting.rb
139
142
  - app/views/layouts/mission_control/servers/application.html.erb
140
143
  - app/views/mission_control/servers/dashboards/combo_histories/show.html.erb
141
144
  - app/views/mission_control/servers/dashboards/cpu_histories/show.html.erb
@@ -151,11 +154,13 @@ files:
151
154
  - app/views/mission_control/servers/projects/index.html.erb
152
155
  - app/views/mission_control/servers/projects/new.html.erb
153
156
  - app/views/mission_control/servers/projects/show.html.erb
157
+ - app/views/mission_control/servers/service_settings/edit.html.erb
154
158
  - config/importmap.rb
155
159
  - config/routes.rb
156
160
  - config/tailwind.config.js
157
161
  - db/migrate/20240205020304_create_mission_control_servers_projects.rb
158
162
  - db/migrate/20240205031009_create_mission_control_servers_services.rb
163
+ - db/migrate/20240211190130_create_mission_control_servers_service_settings.rb
159
164
  - lib/mission_control/servers.rb
160
165
  - lib/mission_control/servers/configuration.rb
161
166
  - lib/mission_control/servers/engine.rb