Introduction
Introduction Statistics Contact Development Disclaimer Help
call.rb - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
git clone git://jay.scot/warvox
Log
Files
Refs
README
---
call.rb (4559B)
---
1 # == Schema Information
2 #
3 # Table name: calls
4 #
5 # id :integer not null, primary key
6 # created_at :datetime
7 # updated_at :datetime
8 # number :text not null
9 # project_id :integer not null
10 # job_id :integer not null
11 # provider_id :integer not null
12 # answered :boolean
13 # busy :boolean
14 # error :text
15 # audio_length :integer
16 # ring_length :integer
17 # caller_id :text
18 # analysis_job_id :integer
19 # analysis_started_at :datetime
20 # analysis_completed_at :datetime
21 # peak_freq :float
22 # peak_freq_data :text
23 # line_type :text
24 # fprint :integer is an Array
25 #
26
27 class Call < ApplicationRecord
28
29 reportable :hourly, aggregation: :count, grouping: :hour, live_data: t…
30 reportable :daily, aggregation: :count, grouping: :day, live_data: tru…
31 reportable :weekly, aggregation: :count, grouping: :week, live_data: t…
32 reportable :monthly, aggregation: :count, grouping: :month, live_data:…
33
34 reportable :analyzed_hourly, aggregation: :count, grouping: :hour, dat…
35 reportable :analyzed_daily, aggregation: :count, grouping: :day, date_…
36 reportable :analyzed_weekly, aggregation: :count, grouping: :week, dat…
37 reportable :analyzed_monthly, aggregation: :count, grouping: :month, d…
38
39 belongs_to :project
40 belongs_to :provider
41 belongs_to :job
42 has_one :call_medium, dependent: :delete
43
44 def matches
45 # "AND (( icount(\'{#{fprint.map{|x| x.to_s}.join(",")}}\'::int[]…
46 self.find_by_sql([
47 'SELECT calls.*, ' +
48 " (( icount(ARRAY[?]::int[] & calls.fprint::int[]) / icount(ARRAY…
49 'FROM calls ' +
50 'WHERE icount(calls.fprint) > 0 AND ' +
51 "calls.job_id = ? AND " +
52 "calls.id != ? " +
53 'ORDER BY matchscore DESC',
54 fprint_map,
55 fprint_map,
56 self.job_id,
57 self.id
58 ])
59 end
60
61 def matches_all_jobs
62
63 # "AND (( icount(\'{#{fprint.map{|x| x.to_s}.join(",")}}\'::int[]…
64 self.find_by_sql([
65 'SELECT calls.*, ' +
66 " (( icount(ARRAY[?]::int[] & calls.fprint::int[]) / icount(ARRAY…
67 'FROM calls ' +
68 'WHERE icount(calls.fprint) > 0 AND ' +
69 "calls.id != ? " +
70 'ORDER BY matchscore DESC',
71 fprint,
72 fprint,
73 self.id
74 ])
75 end
76
77 after_save :update_linked_line
78
79 def paginate_matches(scope, min_match, page, per_page)
80
81 match_sql =
82 'SELECT calls.*, ' +
83 " (( icount(ARRAY[?]::int[] & calls.fprint::int[]) / icount(ARRAY…
84 'FROM calls ' +
85 'WHERE icount(calls.fprint) > 0 AND '
86 args = [fprint, fprint]
87
88 case scope
89 when 'job'
90 match_sql << " calls.job_id = ? AND "
91 args << job.id.to_i
92 when 'project'
93 match_sql << " calls.project_id = ? AND "
94 args << project_id.to_i
95 end
96
97 match_sql << "calls.id != ? "
98 args << self.id
99
100 match_sql << " AND (( icount(ARRAY[?]::int[] & calls.fprint::int[]) …
101 args << fprint
102 args << fprint
103 args << min_match.to_f
104
105 query = [match_sql, *args]
106 Call.paginate_by_sql(query, page: page, per_page: per_page)
107 end
108
109 def media
110 CallMedium.where(call_id: self.id, project_id: self.project_id).firs…
111 end
112
113 def media_fields
114 CallMedium.columns_hash.keys.reject{|x| x =~ /^id|_id$/}
115 end
116
117 def linked_line
118 Line.where(number: self.number, project_id: self.project_id).first_o…
119 end
120
121 def update_linked_line
122 line = linked_line
123
124 if self[:line_type]
125 line.line_type = self[:line_type]
126 line.save
127 end
128 end
129
130 end
You are viewing proxied material from jay.scot. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.