Commit 594d37b

mo khan <mo@mokhan.ca>
2015-02-10 02:43:03
extract api.
1 parent 72a1483
app/controllers/agents/files_controller.rb
@@ -1,28 +0,0 @@
-module Agents
-  class FilesController < ApplicationController
-    before_action :load_agent
-    before_action do
-      request.format = :json
-    end
-
-    def index
-    end
-
-    def show
-      @fingerprint = params[:id]
-      @file = Disposition.find_by(fingerprint: params[:id])
-      message = {
-        agent_id: params[:id],
-        type: :lookup,
-        data: params[:data]
-      }
-      Publisher.publish("events.scanned.#{@agent.id}", message)
-    end
-
-    private
-
-    def load_agent
-      @agent = Agent.find(params[:agent_id])
-    end
-  end
-end
app/controllers/api/agents/events_controller.rb
@@ -0,0 +1,19 @@
+module Api
+  module Agents
+    class EventsController < ApplicationController
+      def create
+        @agent = Agent.find(params[:agent_id])
+        message = event_params.merge({agent_id: @agent.id})
+        routing_key = "events.#{event_params[:type]}.#{@agent.id}"
+        Publisher.publish(routing_key, message)
+        render nothing: true
+      end
+
+      private
+
+      def event_params
+        params[:event]
+      end
+    end
+  end
+end
app/controllers/api/agents/files_controller.rb
@@ -0,0 +1,21 @@
+module Api
+  module Agents
+    class FilesController < ApplicationController
+      before_action do
+        request.format = :json
+      end
+
+      def show
+        @agent = Agent.find(params[:agent_id])
+        @fingerprint = params[:id]
+        @file = Disposition.find_by(fingerprint: params[:id])
+        message = {
+          agent_id: params[:id],
+          type: :lookup,
+          data: params[:data]
+        }
+        Publisher.publish("events.scanned.#{@agent.id}", message)
+      end
+    end
+  end
+end
app/controllers/api/agents_controller.rb
@@ -0,0 +1,15 @@
+module Api
+  class AgentsController < ApplicationController
+    #before_action do
+      #request.format = :json
+    #end
+
+    def create
+      @agent = Agent.create!(agent_params)
+    end
+
+    def agent_params
+      params.require(:agent).permit(:hostname)
+    end
+  end
+end
app/controllers/agents_controller.rb
@@ -1,74 +1,48 @@
 class AgentsController < ApplicationController
-  before_action :set_agent, only: [:show, :edit, :update, :destroy]
-
-  # GET /agents
-  # GET /agents.json
   def index
     @agents = Agent.all
   end
 
-  # GET /agents/1
-  # GET /agents/1.json
   def show
+    @agent = Agent.find(params[:id])
   end
 
-  # GET /agents/new
   def new
     @agent = Agent.new
   end
 
-  # GET /agents/1/edit
   def edit
+    @agent = Agent.find(params[:id])
   end
 
-  # POST /agents
-  # POST /agents.json
   def create
     @agent = Agent.new(agent_params)
 
-    respond_to do |format|
-      if @agent.save
-        format.html { redirect_to @agent, notice: 'Agent was successfully created.' }
-        format.json { render :show, status: :created, location: @agent }
-      else
-        format.html { render :new }
-        format.json { render json: @agent.errors, status: :unprocessable_entity }
-      end
+    if @agent.save
+      redirect_to @agent, notice: 'Agent was successfully created.'
+    else
+      render :new
     end
   end
 
-  # PATCH/PUT /agents/1
-  # PATCH/PUT /agents/1.json
   def update
-    respond_to do |format|
-      if @agent.update(agent_params)
-        format.html { redirect_to @agent, notice: 'Agent was successfully updated.' }
-        format.json { render :show, status: :ok, location: @agent }
-      else
-        format.html { render :edit }
-        format.json { render json: @agent.errors, status: :unprocessable_entity }
-      end
+    @agent = Agent.find(params[:id])
+    if @agent.update(agent_params)
+      redirect_to @agent, notice: 'Agent was successfully updated.'
+    else
+      render :edit
     end
   end
 
-  # DELETE /agents/1
-  # DELETE /agents/1.json
   def destroy
+    @agent = Agent.find(params[:id])
     @agent.destroy
-    respond_to do |format|
-      format.html { redirect_to agents_url, notice: 'Agent was successfully destroyed.' }
-      format.json { head :no_content }
-    end
+    redirect_to agents_url, notice: 'Agent was successfully destroyed.'
   end
 
   private
-    # Use callbacks to share common setup or constraints between actions.
-    def set_agent
-      @agent = Agent.find(params[:id])
-    end
 
-    # Never trust parameters from the scary internet, only allow the white list through.
-    def agent_params
-      params.require(:agent).permit(:hostname)
-    end
+  def agent_params
+    params.require(:agent).permit(:hostname)
+  end
 end
app/controllers/dispositions_controller.rb
@@ -1,68 +1,46 @@
 class DispositionsController < ApplicationController
   before_action :set_disposition, only: [:show, :edit, :update, :destroy]
 
-  # GET /dispositions
-  # GET /dispositions.json
   def index
     @dispositions = Disposition.all
   end
 
-  # GET /dispositions/1
-  # GET /dispositions/1.json
   def show
   end
 
-  # GET /dispositions/new
   def new
     @disposition = Disposition.new
     @states = Disposition.states
   end
 
-  # GET /dispositions/1/edit
   def edit
     @states = Disposition.states
   end
 
-  # POST /dispositions
-  # POST /dispositions.json
   def create
     fingerprint = disposition_params[:fingerprint]
     Publisher.publish("commands.poke.#{fingerprint}", disposition_params)
 
-    respond_to do |format|
-      format.html { redirect_to dispositions_path, notice: 'Disposition was successfully created.' }
-      format.json { head :no_content }
-    end
+    redirect_to dispositions_path, notice: 'Disposition was successfully created.'
   end
 
-  # PATCH/PUT /dispositions/1
-  # PATCH/PUT /dispositions/1.json
   def update
     Publisher.publish("poke", disposition_params)
-    respond_to do |format|
-      format.html { redirect_to dispositions_path, notice: 'Disposition was successfully updated.' }
-      format.json { head :no_content }
-    end
+    redirect_to dispositions_path, notice: 'Disposition was successfully updated.'
   end
 
-  # DELETE /dispositions/1
-  # DELETE /dispositions/1.json
   def destroy
     @disposition.destroy
-    respond_to do |format|
-      format.html { redirect_to dispositions_url, notice: 'Disposition was successfully destroyed.' }
-      format.json { head :no_content }
-    end
+    redirect_to dispositions_url, notice: 'Disposition was successfully destroyed.'
   end
 
   private
-    # Use callbacks to share common setup or constraints between actions.
-    def set_disposition
-      @disposition = Disposition.find_by(fingerprint: params[:id])
-    end
 
-    # Never trust parameters from the scary internet, only allow the white list through.
-    def disposition_params
-      params.require(:disposition).permit(:fingerprint, :state)
-    end
+  def set_disposition
+    @disposition = Disposition.find_by(fingerprint: params[:id])
+  end
+
+  def disposition_params
+    params.require(:disposition).permit(:fingerprint, :state)
+  end
 end
app/models/agent.rb
@@ -1,3 +1,3 @@
 class Agent < ActiveRecord::Base
-  has_many :events
+  has_many :events, dependent: :destroy
 end
app/models/event.rb
@@ -1,3 +1,4 @@
 class Event < ActiveRecord::Base
   belongs_to :agent
+  validates_presence_of :agent
 end
app/views/agents/files/index.json.jbuilder → app/views/api/agents/files/index.json.jbuilder
File renamed without changes
app/views/agents/files/show.json.jbuilder → app/views/api/agents/files/show.json.jbuilder
File renamed without changes
app/views/agents/show.json.jbuilder → app/views/api/agents/create.json.jbuilder
File renamed without changes
app/views/agents/index.json.jbuilder → app/views/api/agents/index.json.jbuilder
File renamed without changes
app/views/dispositions/index.json.jbuilder
@@ -1,4 +0,0 @@
-json.array!(@dispositions) do |disposition|
-  json.extract! disposition, :fingerprint, :state
-  json.url disposition_url(disposition, format: :json)
-end
app/views/dispositions/show.json.jbuilder
@@ -1,1 +0,0 @@
-json.extract! @disposition, :fingerprint, :state
config/routes.rb
@@ -4,6 +4,13 @@ Rails.application.routes.draw do
     resources :files, only: [:index, :show], controller: 'agents/files'
   end
 
+  namespace :api do
+    resources :agents, only: [:create] do
+      resources :events, only: [:create], controller: 'agents/events'
+      resources :files, only: [:show], controller: 'agents/files'
+    end
+  end
+
   resources :dispositions
   root 'agents#index'
 end
db/migrate/20150204042612_add_agent_id_to_events.rb
@@ -1,5 +1,6 @@
 class AddAgentIdToEvents < ActiveRecord::Migration
   def change
-    add_reference :events, :agent, index: true
+    add_column :events, :agent_id, :uuid, null: false
+    add_index :events, :agent_id
   end
 end
db/schema.rb
@@ -30,12 +30,14 @@ ActiveRecord::Schema.define(version: 20150207194524) do
     t.datetime "updated_at",  null: false
   end
 
+  add_index "dispositions", ["fingerprint"], name: "index_dispositions_on_fingerprint", unique: true, using: :btree
+
   create_table "events", id: :uuid, default: "uuid_generate_v4()", force: :cascade do |t|
     t.string   "type"
     t.json     "data"
     t.datetime "created_at", null: false
     t.datetime "updated_at", null: false
-    t.integer  "agent_id"
+    t.uuid     "agent_id",   null: false
   end
 
   add_index "events", ["agent_id"], name: "index_events_on_agent_id", using: :btree
lib/fake_agent.rb
@@ -10,8 +10,7 @@ class FakeAgent
   end
 
   def register
-    url = "#{endpoint}/agents.json"
-    response = Typhoeus.post(url, body: { agent: { hostname: Socket.gethostname } })
+    response = Typhoeus.post(registration_url, body: { agent: { hostname: Socket.gethostname } })
     json = JSON.parse(response.body)
     @id = json["id"]
   end
@@ -113,10 +112,14 @@ class FakeAgent
   end
 
   def file_query_url(fingerprint)
-    "#{endpoint}/agents/#{id}/files/#{fingerprint}"
+    "#{endpoint}/api/agents/#{id}/files/#{fingerprint}"
   end
 
   def event_url
-    "#{endpoint}/agents/#{id}/events/"
+    "#{endpoint}/api/agents/#{id}/events/"
+  end
+
+  def registration_url
+    "#{endpoint}/api/agents"
   end
 end