MissionControl::Servers
The goal of MissionControl::Servers is to provide a simple monitoring of the resources on your Ruby on Rails application. You can either use this directly on the projects or create a separate Ruby on Rails application to mount this in.
Installation
Add this line to your application's Gemfile:
bundle add "mission_control-servers"
bin/rails mission_control_servers:install:migrations
Add a mount to your config/routes.rb
mount MissionControl::Servers::Engine => "/mission_control-servers"
Configuration
Within your application, you can make some configuration changes in how the gem operates. Below are the default configuration options. You can override these options by creating an initializer file.
For example, if you're wanting to use MissionControl::Servers in a single project, then there is no need to have
the ability to create multiple projects. You can set the single_project_mode
to true which will hide the ability
to create new projects.
# config/initializers/mission_control_servers.rb
MissionControl::Servers.configure do |config|
config.single_project_mode = true
end
Usage
Create a project. Once you create a project, you can easily copy the script specific to that project.
Install a script which captures:
- Hostname
- CPU Usage
- Memory Usage
- Free Memory
- Free Disk Space
The data will be retained for 7 days automatically. After 7 days, the data will start truncating itself so that it doesn't take up much disk space within the database.
If you would like to put the dashboard on something like a Raspberry Pi, you can use the dark
parameter to
change the dashboard to a dark mode automatically. This will hopefully help provide a "hands off" approach to
setting up the kiosk mode.
You can also create public links with read only permissions.
URL Configuration
Dark Mode
http://localhost:3000/mission_control-servers/projects?dark=true
Interval
You can also adjust the interval when you have multiple servers on a project. The default setting is 10 seconds
between servers, but this can be adjusted with an URL Parameter. The interval
value is entered in seconds.
http://localhost:3000/mission_control-servers/projects?interval=10
Combo History
By default, the CPU Usage and Memory Usage Line Chart will be combined, but you can add the URL Parameter ?combo=false
to
toggle this behavior. Default is true
.
http://localhost:3000/mission_control-servers/projects?combo=false
Combining URL Parameters
If you need to change multiple settings, you can chain these in the URL Parameters.
http://localhost:3000/mission_control-servers/projects?interval=30&dark=true&combo=false
Protecting the Dashboard
You can protect the dashboard by using a constraint. This will allow you to only allow certain users to access the dashboard. However, the ingress still needs to be accessible by the servers which are being monitored. In order to install the script on the servers, you also have to expose the endpoint for the script.
Rails.application.routes.draw do
MissionControl::Servers::RoutingHelpers.add_public_routes_helper(self)
constraints AdminConstraint do
mount MissionControl::Servers::Engine => "/mission_control-servers"
end
end
If you want to change the endpoint, you can do so by changing the mount path.
Rails.application.routes.draw do
engine_mount_path = "/dashymcdashface"
MissionControl::Servers::RoutingHelpers.add_public_routes_helper(self, engine_mount_path)
constraints AdminConstraint do
mount MissionControl::Servers::Engine => engine_mount_path
end
end
In this example, we have directly given a path to the ingress, but locked down everything else to the AdminConstraint.
The AdminConstraint takes in the request and calls the matches?
method. If the method returns true,
then the routes will be defined for that request.
class AdminConstraint
def self.matches?(request)
true
end
end
Demo
You can see a demo of the application at https://dashboard.railsenv.com/
Screenshots
Simple Installation
View all of your projects
Detailed Dashboard updates automatically
Dark Mode support added in v0.1.4 (you can set this with a URL Param dark=true)
License
The gem is available as open source under the terms of the MIT License.