Skip to content

Instantly share code, notes, and snippets.

class PingWidgetsController < ApplicationController
skip_before_filter :verify_authenticity_token, only: [:cors_set_access_control_headers, :cors_preflight_check]
before_filter :cors_preflight_check
after_filter :cors_set_access_control_headers
def settings
headers['Access-Control-Allow-Origin'] = '*'
if params.has_key?(:uuid)
Texthub::Application.routes.draw do
mount_roboto
mount Api, at: '/api'
authenticated :user do
root to: 'home#index', as: 'authenticated_root'
end
root 'home#homepage'
devise_for :admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)
devise_for :users, controllers: { invitations: 'users/invitations', registrations: 'registrations', sessions: 'sessions' }
# new api
class Api < Grape::API
version 'v1'
format :json
use Rack::Timeout
rescue_from Rack::Timeout::RequestTimeoutError do |e|
NewRelic::Agent.instance.error_collector.notice_error e,
uri: env["api.endpoint"].request.path,
referer: env["api.endpoint"].request.referer,
def calculate_messages_per_day
if self.messages.any?
messages_per_day = self.messages.where('created_at > ?', self.created_at).group("DATE(created_at AT TIME ZONE '-08:00')").count.map do |day, amount|
{ day: day.to_s, v: amount }
end
end
end
def calculate_messages_per_day_per_user
if self.messages.any?
def trying
res = Message.connection.execute("SELECT COUNT(*) AS amount, user_id, DATE(created_at AT TIME ZONE '-08:00') AS day FROM messages WHERE company_id = #{self.id} GROUP BY user_id, DATE(created_at AT TIME ZONE '-08:00');")
messages_per_day_per_user = {}
res.each do |row|
user_id = row["user_id"]
messages_per_day_per_user[user_id] ||= []
day = row["day"].to_s
amount = row["amount"].to_i
messages_per_day_per_user[user_id] << { day: day, amount: amount }
end
class AddCreatedAtIndexOnMessage < ActiveRecord::Migration
def up
execute "CREATE INDEX index_messages_on_day ON messages USING btree (DATE(created_at AT TIME ZONE '-08:00'));"
end
def down
execute "DROP INDEX index_messages_on_day;"
end
end
def trying
res = Message.connection.execute("SELECT COUNT(*) AS amount, user_id, DATE(created_at AT TIME ZONE '-08:00') AS day FROM messages WHERE company_id = #{self.id} GROUP BY DATE(created_at AT TIME ZONE '-08:00'), user_id;")
messages_per_day_per_user = {}
res.each do |row|
user_id = row["user_id"]
messages_per_day_per_user[user_id] ||= []
day = row["day"].to_s
amount = row["amount"].to_i
messages_per_day_per_user[user_id] << { day: day, amount: amount }
end
def calculate_response_time
Message.connection.execute("
SELECT AVG(q3.response_time) AS average, DATE(created_at AT TIME ZONE '-08:00') AS day FROM
(SELECT q2.* FROM
(SELECT q1.*, q1.created_at - LEAD(created_at) OVER (PARTITION BY customer_id ORDER BY created_at) AS response_time FROM
(SELECT m.*, LEAD(direction) OVER (PARTITION BY customer_id ORDER BY created_at) AS next_direction FROM messages m
WHERE company_id = 2 AND via_api = false AND mass_message_id IS NULL) AS q1
WHERE q1.direction <> q1.next_direction AND q1.next_direction IS NOT NULL) AS q2
WHERE q2.direction = 'received') AS q3
GROUP BY DATE(created_at AT TIME ZONE '-08:00')
{"average"=>"-30 days -24:07:39.67514", "day"=>"2014-04-09"}
{"average"=>nil, "day"=>"2014-04-10"}
{"average"=>"-18 days -11:59:25.252155", "day"=>"2014-04-11"}
{"average"=>"-52 days -20:15:16.493404", "day"=>"2014-04-12"}
{"average"=>"-1 days -13:53:25.881951", "day"=>"2014-04-13"}
{"average"=>"-21 days -26:31:47.568003", "day"=>"2014-04-14"}
{"average"=>"-20 days -09:51:19.84725", "day"=>"2014-04-15"}
{"average"=>"-25 days -25:40:46.853917", "day"=>"2014-04-16"}
{"average"=>"-23 days -23:41:32.584254", "day"=>"2014-04-17"}
{"average"=>"-23 days -13:32:31.002631", "day"=>"2014-04-18"}
{"average"=>"-03:29:36.622436", "day"=>"2014-10-25"}
{"average"=>"-19:18:16.957437", "day"=>"2015-01-11"}
{"average"=>"-7 days -07:39:57.416137", "day"=>"2014-09-20"}
{"average"=>"-12:27:04.902307", "day"=>"2014-11-13"}
{"average"=>"-2 days -26:33:49.611325", "day"=>"2014-09-22"}
{"average"=>"-4 days -26:24:29.228502", "day"=>"2014-09-21"}
{"average"=>"-12:29:43.323986", "day"=>"2014-10-17"}
{"average"=>"-21:08:21.888295", "day"=>"2014-10-04"}
{"average"=>"-7 days -23:22:35.682252", "day"=>"2014-09-13"}
{"average"=>"-6 days -10:23:57.00454", "day"=>"2014-09-01"}