Sha256: 3b9f3ce04b986c65a21f9eaceed27e605f18fb0abdd8df690b0d2451445b610b

Contents?: true

Size: 1.3 KB

Versions: 5

Compression:

Stored size: 1.3 KB

Contents

require_relative 'application_controller'

module DeviceTracker
  # :nodoc:
  class HeartbeatController < ApplicationController
    post '/' do
      begin
        heartbeat = JSON.parse(request.body.read)
      rescue JSON::ParserError
        halt 412, {
          error: true,
          message: 'Error parsing payload, check and try again.'
        }.to_json
      end

      # {"heartbeat": {"device_id": "BBCFM003",
      # "longitude": 53.470096, "latitude": -2.281457}}
      if valid_heartbeat?(heartbeat)

        heartbeat = heartbeat['heartbeat']

        unid = heartbeat['device_id'].upcase

        if Device.exists?(unid: unid)
          device = Device.find_by_unid(unid)

          Heartbeat.create(longitude: heartbeat['longitude'],
                           latitude: heartbeat['latitude'],
                           device_id: device.id)

          halt 201, {
            error: false,
            message: "Heartbeat for device: #{unid} received."
          }.to_json
        else
          halt 404, {
            error: true,
            message: "The device with id: #{unid} doesn't exist."
          }.to_json
        end

      else
        halt 412, {
          error: true,
          message: 'Manformed heartbeat received, so will not be processed.'
        }.to_json
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
device_tracker-0.5.0 lib/device_tracker/controllers/heartbeat_controller.rb
device_tracker-0.4.0 lib/device_tracker/controllers/heartbeat_controller.rb
device_tracker-0.3.2 lib/device_tracker/controllers/heartbeat_controller.rb
device_tracker-0.3.1 lib/device_tracker/controllers/heartbeat_controller.rb
device_tracker-0.3.0 lib/device_tracker/controllers/heartbeat_controller.rb