This repository has been archived by the owner on Mar 27, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
295 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
#to be re-written | ||
class AppController < Sinatra::Base | ||
before do | ||
content_type('application/json') | ||
end | ||
|
||
enable :sessions | ||
|
||
register do | ||
def check (name) | ||
condition do | ||
unless send(name) == true | ||
error 401, generate_json(error: "You are not authorized to access this resource") | ||
end | ||
end | ||
end | ||
end | ||
|
||
helpers do | ||
def valid_token? | ||
Ragios::Admin.valid_token?(request.cookies["RagiosAuthSession"]) | ||
end | ||
end | ||
|
||
get '/' do | ||
redirect '/admin/index' | ||
end | ||
|
||
get '/favicon.ico' do | ||
redirect '/images/favicon.ico' | ||
end | ||
|
||
post '/session*' do | ||
if Ragios::Admin.authenticate?(params[:username],params[:password]) | ||
generate_json(RagiosAuthSession: Ragios::Admin.session) | ||
else | ||
status 401 | ||
generate_json(error: "You are not authorized to access this resource") | ||
end | ||
end | ||
|
||
get '/admin/index' do | ||
check_logout | ||
content_type('text/html') | ||
erb :index | ||
end | ||
|
||
get '/admin/login' do | ||
@login_page = true | ||
content_type('text/html') | ||
erb :login | ||
end | ||
|
||
post '/admin_session*' do | ||
@login_page = true | ||
if Ragios::Admin.authenticate?(params[:username], params[:password]) | ||
response.set_cookie "RagiosAuthSession", Ragios::Admin.session | ||
session[:authenticated] = true | ||
redirect '/admin/index' | ||
else | ||
@error = "Invalid username and/or password" | ||
content_type('text/html') | ||
erb :login | ||
end | ||
end | ||
|
||
get '/admin/logout' do | ||
token = request.cookies['RagiosAuthSession'] | ||
response.delete_cookie "RagiosAuthSession" | ||
session.clear | ||
Ragios::Admin.invalidate_token(token) | ||
redirect '/admin/login' | ||
end | ||
|
||
|
||
def check_logout | ||
token = request.cookies['RagiosAuthSession'] | ||
if logged_out?(token) | ||
redirect '/admin/login' | ||
end | ||
end | ||
|
||
protected | ||
|
||
def logged_out?(token) | ||
return false if !Ragios::Admin.do_authentication? | ||
(!session[:authenticated] || !Ragios::Admin.valid_token?(token)) ? true : false | ||
end | ||
|
||
def bad_request | ||
generate_json(error: "bad_request") | ||
end | ||
|
||
def try_request | ||
yield | ||
rescue Ragios::MonitorNotFound, Ragios::EventNotFound => e | ||
status 404 | ||
body generate_json(error: e.message) | ||
rescue => e | ||
controller.send_stderr(e) | ||
status 500 | ||
body generate_json(error: e.message) | ||
end | ||
|
||
def generate_json(str) | ||
JSON.generate(str) | ||
end | ||
def parse_json(json_str) | ||
JSON.parse(json_str, symbolize_names: true) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
#to be re-written | ||
#copied as is from rest_server.rb | ||
class EventsController < ApplicationController | ||
|
||
helpers do | ||
def events_ctr | ||
@events ||= Ragios::Events | ||
end | ||
end | ||
|
||
delete '/events/:id*', :check => :valid_token? do | ||
try_request do | ||
event_id = params[:id] | ||
events_ctr.delete(event_id) | ||
generate_json(ok: true) | ||
end | ||
end | ||
|
||
#get event by id | ||
get '/events/:id*', :check => :valid_token? do | ||
try_request do | ||
event_id = params[:id] | ||
event = events_ctr.get(event_id) | ||
generate_json(event) | ||
end | ||
end | ||
|
||
get '/events*', :check => :valid_token? do | ||
try_request do | ||
events = events_ctr.all(take: params[:take]) | ||
generate_json(events) | ||
end | ||
end | ||
|
||
get '/admin/events/:id*' do | ||
check_logout | ||
@event_id = params[:id] | ||
content_type('text/html') | ||
erb :event, :layout => false | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
#re-write for controller.rb | ||
module Ragios | ||
module Manager | ||
class Manager | ||
|
||
|
||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
#re-write for controller.rbmodule Ragios | ||
module Ragios | ||
class MonitorManager | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
#to be re-written | ||
#copied as is from rest_server.rb | ||
class MonitorsController < ApplicationController | ||
|
||
helpers do | ||
def controller | ||
@controller ||= Ragios::Controller | ||
end | ||
end | ||
|
||
#adds a monitor to the system and starts monitoring them | ||
post '/monitors*', :check => :valid_token? do | ||
try_request do | ||
monitor = parse_json(request.body.read) | ||
monitor_with_id = controller.add(monitor) | ||
generate_json(monitor_with_id) | ||
end | ||
end | ||
|
||
#tests a monitor | ||
post '/tests*', :check => :valid_token? do | ||
try_request do | ||
monitor_id = params[:id] | ||
controller.test_now(monitor_id) | ||
generate_json(ok: true) | ||
end | ||
end | ||
|
||
#get monitors that match multiple keys | ||
get '/monitors/attributes', :check => :valid_token? do | ||
pass if (params.keys[0] == "splat") && (params[params.keys[0]].kind_of?(Array)) | ||
options = params | ||
options.delete("splat") | ||
options.delete("captures") | ||
monitors = controller.where(options) | ||
generate_json(monitors) | ||
end | ||
|
||
delete '/monitors/:id*', :check => :valid_token? do | ||
try_request do | ||
monitor_id = params[:id] | ||
controller.delete(monitor_id) | ||
generate_json(ok: true) | ||
end | ||
end | ||
|
||
#update an already existing monitor | ||
put '/monitors/:id*', :check => :valid_token? do | ||
try_request do | ||
pass unless request.media_type == 'application/json' | ||
data = parse_json(request.body.read) | ||
monitor_id = params[:id] | ||
controller.update(monitor_id,data) | ||
generate_json(ok: true) | ||
end | ||
end | ||
|
||
#stop a running monitor | ||
put '/monitors/:id*', :check => :valid_token? do | ||
pass unless params["status"] == "stopped" | ||
monitor_id = params[:id] | ||
try_request do | ||
controller.stop(monitor_id) | ||
generate_json(ok: true) | ||
end | ||
end | ||
|
||
#start a stopped monitor | ||
put '/monitors/:id*', :check => :valid_token? do | ||
pass unless params["status"] == "active" | ||
try_request do | ||
monitor_id = params[:id] | ||
controller.start(monitor_id) | ||
generate_json(ok: true) | ||
end | ||
end | ||
|
||
get '/monitors/:id/events_by_type/:event_type*', :check => :valid_token? do | ||
try_request do | ||
events = controller.get_events_by_type(params[:id], params[:event_type], start_date: params[:end_date], end_date: params[:start_date], take: params[:take]) | ||
generate_json(events) | ||
end | ||
end | ||
|
||
get '/monitors/:id/events_by_state/:state*', :check => :valid_token? do | ||
try_request do | ||
events = controller.get_events_by_state(params[:id], params[:state], start_date: params[:end_date], end_date: params[:start_date], take: params[:take]) | ||
generate_json(events) | ||
end | ||
end | ||
|
||
get '/monitors/:id/events*', :check => :valid_token? do | ||
try_request do | ||
events = controller.get_events(params[:id], start_date: params[:end_date], end_date: params[:start_date], take: params[:take]) | ||
generate_json(events) | ||
end | ||
end | ||
|
||
#get monitor by id | ||
get '/monitors/:id*', :check => :valid_token? do | ||
try_request do | ||
monitor_id = params[:id] | ||
monitor = controller.get(monitor_id, include_current_state = true) | ||
generate_json(monitor) | ||
end | ||
end | ||
|
||
get '/monitors*', :check => :valid_token? do | ||
try_request do | ||
monitors = controller.get_all(take: params[:take]) | ||
generate_json(monitors) | ||
end | ||
end | ||
|
||
get '/admin/index' do | ||
check_logout | ||
content_type('text/html') | ||
erb :index | ||
end | ||
|
||
get '/admin/monitors/new' do | ||
check_logout | ||
content_type('text/html') | ||
erb :new | ||
end | ||
|
||
get '/admin/monitors/:id*' do | ||
check_logout | ||
@monitor = controller.get(params[:id]) | ||
content_type('text/html') | ||
erb :monitor | ||
end | ||
end |