summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2015-10-18 16:22:10 -0600
committermo khan <mo@mokhan.ca>2015-10-18 16:22:10 -0600
commit354a97f614ce32788c049df3556baac5e708b48f (patch)
tree86e42125957b360191ef1459f1e711c302461502
parenteab963bc3b57bad94573dd080c69b895c1aa15a7 (diff)
add sinatra application to display all logs.
-rw-r--r--Gemfile1
-rw-r--r--Gemfile.lock9
-rw-r--r--Procfile1
-rw-r--r--Vagrantfile1
-rw-r--r--config.ru5
-rw-r--r--lib/killjoy/cassandra_db.rb2
-rw-r--r--lib/killjoy/web.rb24
-rw-r--r--lib/killjoy/web/views/index.erb27
8 files changed, 69 insertions, 1 deletions
diff --git a/Gemfile b/Gemfile
index 87ca5e5..694b703 100644
--- a/Gemfile
+++ b/Gemfile
@@ -8,6 +8,7 @@ gem "foreman" # for an easy deployment story with Upstart
gem "lz4-ruby"
gem "pry"
gem "rake"
+gem "sinatra"
gem "sneakers"
gem "spank"
gem "statsd-ruby" # using statsd with Sneakers::Metrics
diff --git a/Gemfile.lock b/Gemfile.lock
index 4307106..f2d4222 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -39,6 +39,9 @@ GEM
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
+ rack (1.6.4)
+ rack-protection (1.5.3)
+ rack
rake (10.4.2)
rspec (3.3.0)
rspec-core (~> 3.3.0)
@@ -56,6 +59,10 @@ GEM
serverengine (1.5.11)
sigdump (~> 0.2.2)
sigdump (0.2.3)
+ sinatra (1.4.6)
+ rack (~> 1.4)
+ rack-protection (~> 1.4)
+ tilt (>= 1.3, < 3)
slop (3.6.0)
sneakers (2.3.4)
bunny (~> 2.2.0)
@@ -67,6 +74,7 @@ GEM
thor (0.19.1)
thread (0.1.7)
thread_safe (0.3.5)
+ tilt (2.0.1)
tzinfo (1.2.2)
thread_safe (~> 0.1)
virtus (1.0.5)
@@ -88,6 +96,7 @@ DEPENDENCIES
pry
rake
rspec
+ sinatra
sneakers
spank
statsd-ruby
diff --git a/Procfile b/Procfile
index ea3d5c8..970826f 100644
--- a/Procfile
+++ b/Procfile
@@ -1,3 +1,4 @@
+web: bundle exec rackup -p9292 --host 0.0.0.0
worker1: RMQ_SHARD=0 exe/killjoy
worker2: RMQ_SHARD=1 exe/killjoy
worker3: RMQ_SHARD=2 exe/killjoy
diff --git a/Vagrantfile b/Vagrantfile
index 6668d5a..1f066fc 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -12,6 +12,7 @@ Vagrant.configure(2) do |config|
config.vm.network "forwarded_port", guest: 9042, host: 9042
config.vm.network "forwarded_port", guest: 9125, host: 9125
config.vm.network "forwarded_port", guest: 8888, host: 8888
+ config.vm.network "forwarded_port", guest: 9292, host: 9292
config.vm.provision :chef_apply do |chef|
chef.recipe = File.read("config/chef_apply.rb")
end
diff --git a/config.ru b/config.ru
new file mode 100644
index 0000000..fd3b420
--- /dev/null
+++ b/config.ru
@@ -0,0 +1,5 @@
+require "bundler/setup"
+$LOAD_PATH.unshift(File.join(Dir.pwd, "lib"))
+require "killjoy/web"
+
+run Sinatra::Application
diff --git a/lib/killjoy/cassandra_db.rb b/lib/killjoy/cassandra_db.rb
index 4618dff..4d8753d 100644
--- a/lib/killjoy/cassandra_db.rb
+++ b/lib/killjoy/cassandra_db.rb
@@ -1,6 +1,6 @@
module Killjoy
class CassandraDb
- def self.from(table, session)
+ def self.from(table, session = Spank::IOC.resolve(:session))
QueryBuilder.new(table, session)
end
end
diff --git a/lib/killjoy/web.rb b/lib/killjoy/web.rb
new file mode 100644
index 0000000..8951781
--- /dev/null
+++ b/lib/killjoy/web.rb
@@ -0,0 +1,24 @@
+require 'sinatra'
+require 'killjoy'
+
+set :bind, '0.0.0.0'
+set :port, 9292
+set :views, settings.root + '/web/views'
+
+Killjoy::Startup.new(Spank::Container.new).run do |container|
+ Spank::IOC.bind_to(container)
+ Spank::IOC.resolve(:session).execute("select * from system.hints;")
+end
+
+get '/' do
+ @logs = Killjoy::CassandraDb
+ .from(:log_lines)
+ .limit(100)
+ .map { |x| Killjoy::LogLine.new(x) }
+ erb :index
+end
+
+get '/ping' do
+ "Hello World!"
+end
+
diff --git a/lib/killjoy/web/views/index.erb b/lib/killjoy/web/views/index.erb
new file mode 100644
index 0000000..4f2a926
--- /dev/null
+++ b/lib/killjoy/web/views/index.erb
@@ -0,0 +1,27 @@
+<h1>Logs</h1>
+<table>
+ <thead>
+ <tr>
+ <th>IP Address</th>
+ <th>Http Status</th>
+ <th>Http Verb</th>
+ <th>Http Version</th>
+ <th>Timestamp</th>
+ <th>Url</th>
+ <th>User Agent</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% @logs.each do |log| %>
+ <tr>
+ <td><%= log.ipaddress %></td>
+ <td><%= log.http_status %></td>
+ <td><%= log.http_verb %></td>
+ <td><%= log.http_version %></td>
+ <td><%= log.timestamp %></td>
+ <td><%= log.url %></td>
+ <td><%= log.user_agent %></td>
+ </tr>
+ <% end %>
+ </tbody>
+</table>