Topic: Create a Rails System Information with 1 controller - phpsysinfo like.

Create a Rails System Information with 1 controller - phpsysinfo like.

This tutorial will show you how to create a very simple but powerful Rails System Information application in only 7 steps or 1 controller.

1.- Create the rails applications Rayis System Information "rsi"

rails rsi -d mysql

2.- Create a controller sysinfo

script\generate controller sysinfo

3.- Before start the server you must configure the database.yml and create at least the si_development database.

Edit config/database.yml

Create the si_development database.

rake db:create

[ Note you don't have to create all the databases at this time.]

4.- Remove the default index.html form the public directory

rm public/index.html

5.- Configure the config/routes.rb to redirect to the proper controller in this case sysinfo

ActionController::Routing::Routes.draw do |map|
  map.root :controller => "sysinfo"

6.- If you start the webserver ./script/server right now you will have:

Unknown action
No action responded to index

Lets create the index method in the sysinfo controller, edit the file app/controllers/sysinfo_controller.rb

class SysinfoController < ApplicationController

  def index
    @server_hostname = %x[uname -a]
    @server_uptime = %x[uptime]
    @server_date = %x[date]
    @server_memory = %x[free]
    @server_release = %x[cat /etc/redhat-release]

    # Networking
    @server_ifconfig = %x[/sbin/ifconfig]

    # Hard Disk
    @server_partitions= %x[df -h |wc -l]
    @hard_disk_usage = %x[df -h]

    # For Fedora & RedHat Based...
    @startup_services_count = %x[/sbin/chkconfig --list |grep :on |wc -l]
    @startup_services = %x[/sbin/chkconfig --list |grep :on]

    # Email Queue / Fedora & RedHat Based...
    @mail_queue_count = %x[ls -l /var/spool/mail |grep rw |wc -l]
    @mail_queue = %x[ls -l /var/spool/mail |grep rw]

    # Server Last Login
    @server_last_login_count = %x[last |grep pts |wc -l]
    @server_last_login = %x[last |grep pts]

    # Server Processes
    @server_processes_count = %x[top -n 1 -b |wc -l]
    @server_processes = %x[top -n 1 -b]

    # Processes Tree - Fedora & RedHat Based...
    @server_process_tree_count = %x[pstree -p |wc -l]
    @server_process_tree = %x[pstree -p]

    # Linux Users
    @server_users_count = %x[cat /etc/passwd | wc -l]
    @server_users = %x[cat /etc/passwd]

    # Linux Groups
    @server_groups_count = %x[cat /etc/group | wc -l]
    @server_groups = %x[cat /etc/group]

    # Server Errors
    @server_errors_count = %x[cat /var/log/messages | grep error |wc -l]
    @server_errors = %x[cat /var/log/messages | grep error]

    # Server Alerts
    @server_alerts_count = %x[cat /var/log/messages | grep alert |wc -l]
    @server_alerts = %x[cat /var/log/messages | grep alert]

    # Server Panics
    @server_panics_count = %x[cat /var/log/messages | grep panic |wc -l]
    @server_panics = %x[cat /var/log/messages | grep panic]

  end

end


7.- If you start the webserver ./script/server right now you will have:
Template is missing

Missing template sysinfo/index.html.erb in view path /home/blopez/rails/no/app/views

Lets create the index.html.erb in the app/views/sysinfo folder:

<b>Server Hostname:</b> <pre> <%= @server_hostname %> </pre> 
<b>Server Uptime:</b> <pre> <%= @server_uptime %> </pre>
<b>Server Date:</b> <pre> <%= @server_date %> </pre>
<b>Server Memory:</b> <pre> <%= @server_memory %> </pre>
<b>Server Release:</b> <pre> <%= @server_release %> </pre>
<b>Networking:</b> <pre> <%= @server_ifconfig %> </pre>


<b>Hard Disk Partitions [<%= @server_partitions %>]:</b>
<pre> <%= @hard_disk_usage %> </pre>

<b>Startup Services [<%= @startup_services_count %>]: </b>
<pre> <%= @startup_services %> </pre>

<b>Mail Queue [<%= @mail_queue_count %>]: </b>
<pre> <%= @mail_queue %> </pre>

<b>Server Last Login [<%= @server_last_login_count %>]:</b>
<pre> <%= @server_last_login %> </pre>

<b>Server Processes [<%= @server_processes_count %>]:</b>
<pre> <%= @server_processes %> </pre>

<b>Server Process Tree [<%= @server_process_tree_count %>]:</b>
<pre> <%= @server_process_tree %> </pre>

<b>Server Users [<%= @server_users_count %>]:</b>
<pre> <%= @server_users %> </pre>

<b>Server Groups [<%= @server_groups_count %>]:</b>
<pre> <%= @server_groups %> </pre>

<b>Server Errors [<%= @server_errors_count %>]:</b>
<pre> <%= @server_errors %> </pre>

<b>Server Alerts [<%= @server_alerts_count %>]:</b>
<pre> <%= @server_alerts %> </pre>

<b>Server Panic [<%= @server_panics_count %>]:</b>
<pre> <%= @server_panics %> </pre>

<center>
Rails SysInfo
</center>


That's all folks now we are ready to launch the web server and show your Rails System Information sumary with all your data:

script/server

Server Hostname:
Server Uptime:
Server Date:
Server Memory:
Server Release:
Networking:
Hard Disk Partitions [#Number of Partitions ]:
Startup Services [# Number of Startup Services ]:
Mail Queue [# Number of Email accounts ]:
Server Last Login [# Number of entries show ]:
Server Processes [# Number of Processes]:
Server Process Tree [# Tree processes with PID]:
Server Users [# Number of entries in /etc/passwd ]:
Server Groups [0 ]:

Server Errors [0 ]:
Server Alerts [0 ]:
Server Panic [0 ]:

What RailsSysInfo is or is not:
This is a quick tool to show Systems Administrator Information.
SysInfo is inspired in: http://phpsysinfo.sourceforge.net/ but now in Rails smile .
The script is not secure and is not designed to be, is just designed to show the concept of execute commands to provide information, use it wisely.
If you need to secure it, I recommend to check the post: http://www.railsforum.com/viewtopic.php?id=15130
Yes this tutorial is for Linux/Unix based systems only ;-)

TODO:
No actions are included in the script, but can be added to interact via remotely just like ActiveResource.
Execution from a cron could be added, then information collected can be inserted into a DB for historical purposes.
The script can add some features to check some values & trigger another events like email notifications.
System Performance Graphs can be added with usage of the "RRD - Round Robin Databse" http://oss.oetiker.ch/rrdtool/ just MRTG Style. [ But that is another project ] ;-)
I think overall this could be a really useful tool... will look into the posibility to create a plugin "Rails System Information" just one step at the time, my expertise in rails is not on the guru level LOL, in the mean time lets keep learning Ruby, Rails & Thin. smile

Best Regards Dinooz

Last edited by dinooz (2008-03-03 18:58:34)

Re: Create a Rails System Information with 1 controller - phpsysinfo like.

Just curious if you updated this at all...

Re: Create a Rails System Information with 1 controller - phpsysinfo like.

a Rolex Oyster Perpetual Datejust Mens 116200-SSO outlet great number of replica replica omega watches handbags including louis vuitton, gucci, prada, hermes, christian dior and any aaa Mulberry replica handbags other luxury ones. considering cheap Dolce & Gabbana sale this, the hand bag manufacturers have created several different designer Balenciaga "Giant Part Time" Bag Red 328A hand bags. which are fake handbags hermes handbags, hermes kelly, hermes jpg , designer handbags, chanel handbags, replica watch chanel wholesale retail bags swiss replica watches quilted bag, chanel tote, louis vuitton handbags, gucci hobo, fendi watches replica spy, fendi handbags, chole watches replica handbags, chole paddington, mulberry handbags, balenciaga handbags, balenciaga Omega Mens 2806.52.37 le dix, dior handbags, Omega Double Eagle Perpetual Calendar 1513.51 jimmy chole handbags, prada handbags, kooba handbags, marc jaco