Introduction
Introduction Statistics Contact Development Disclaimer Help
Stuff media files into their own table - warvox - VoIP based wardialing tool, f…
Log
Files
Refs
README
---
commit 62d6590a9a59c044bf16fc5a750600a9ffd3ea5e
parent 65579c3b33e9c77d614fae06c76e09381980c311
Author: HD Moore <[email protected]>
Date: Fri, 28 Dec 2012 13:22:53 -0600
Stuff media files into their own table
Diffstat:
M app/controllers/analyze_controller… | 2 +-
M app/controllers/dial_results_contr… | 36 ++++++++++++---------------…
M app/models/dial_job.rb | 2 +-
M app/models/dial_result.rb | 12 +++++++++++-
A app/models/dial_result_medium.rb | 3 +++
M bin/analyze_result.rb | 6 ++++--
M bin/export_audio.rb | 11 ++++++-----
A db/migrate/20121228171549_initial_… | 71 +++++++++++++++++++++++++++…
M db/schema.rb | 38 ++++++++++++++++-------------…
M lib/warvox/jobs/analysis.rb | 42 ++++++++++++++++-------------…
M lib/warvox/jobs/dialer.rb | 7 +++++--
11 files changed, 157 insertions(+), 73 deletions(-)
---
diff --git a/app/controllers/analyze_controller.rb b/app/controllers/analyze_co…
@@ -98,7 +98,7 @@ class AnalyzeController < ApplicationController
cpath = nil
cdata = "File not found"
- res = DialResult.find(params[:result_id])
+ res = DialResultMedium.where(:dial_result_id => params[:result_id].to_…
if res
case params[:type]
diff --git a/app/controllers/dial_results_controller.rb b/app/controllers/dial_…
@@ -79,15 +79,17 @@ class DialResultsController < ApplicationController
:per_page => 30
)
- if(@dial_results)
- @call_results = {
- :Timeout => DialResult.count(:conditions =>['dial_job…
- :Busy => DialResult.count(:conditions =>['dial_job…
- :Answered => DialResult.count(:conditions =>['dial_job…
- }
+ unless @dial_results and @dial_results.length > 0
+ redirect_to :action => :index
+ return
end
+ @call_results = {
+ :Timeout => DialResult.count(:conditions =>['dial_job_id = ? …
+ :Busy => DialResult.count(:conditions =>['dial_job_id = ? …
+ :Answered => DialResult.count(:conditions =>['dial_job_id = ? …
+ }
- respond_to do |format|
+ respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @dial_results }
end
@@ -98,6 +100,11 @@ class DialResultsController < ApplicationController
def show
@dial_result = DialResult.find(params[:id])
+ unless @dial_result
+ redirect_to :action => :index
+ return
+ end
+
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @dial_result }
@@ -159,23 +166,8 @@ class DialResultsController < ApplicationController
def purge
@job = DialJob.find(params[:id])
- @job.dial_results.each do |r|
- r.destroy
- end
@job.destroy
- dir = nil
- jid = @job.id
- dfd = Dir.new(WarVOX::Config.data_path)
- dfd.entries.each do |ent|
- j,m = ent.split('-', 2)
- if (m and j == jid)
- dir = File.join(WarVOX::Config.data_path, ent)
- end
- end
-
- FileUtils.rm_rf(dir) if dir
-
respond_to do |format|
format.html { redirect_to :action => 'index' }
format.xml { head :ok }
diff --git a/app/models/dial_job.rb b/app/models/dial_job.rb
@@ -1,7 +1,7 @@
class DialJob < ActiveRecord::Base
attr_accessor :range_file
- has_many :dial_results
+ has_many :dial_results, :dependent => :destroy
validates_presence_of :range, :lines, :seconds
validates_numericality_of :lines, :less_than => 256, :greater_than => 0
diff --git a/app/models/dial_result.rb b/app/models/dial_result.rb
@@ -1,7 +1,7 @@
class DialResult < ActiveRecord::Base
belongs_to :provider
belongs_to :dial_job
-
+ has_one :dial_result_medium, :dependent => :delete
has_many :matches, :class_name => 'DialResult', :finder_sql => proc {
'SELECT dial_results.*, ' +
@@ -21,4 +21,14 @@ class DialResult < ActiveRecord::Base
"dial_results.id != \'#{id}\' " +
'ORDER BY matchscore DESC'
}
+
+
+ def media
+ DialResultMedium.find_or_create_by_dial_result_id(self[:id])
+ end
+
+ def media_fields
+ DialResultMedium.columns_hash.keys.reject{|x| x =~ /^id|_id$/}
+ end
+
end
diff --git a/app/models/dial_result_medium.rb b/app/models/dial_result_medium.rb
@@ -0,0 +1,3 @@
+class DialResultMedium < ActiveRecord::Base
+ belongs_to :dial_result
+end
diff --git a/bin/analyze_result.rb b/bin/analyze_result.rb
@@ -16,14 +16,16 @@ require 'warvox'
#
inp = ARGV.shift || exit(0)
-$0 = "warvox(analyzer): #{inp}"
+num = ARGV.shift || exit(0)
+
+$0 = "warvox(analyzer): #{inp} #{num}"
$stdout.write(
Marshal.dump(
WarVOX::Jobs::CallAnalysis.new(
0
).analyze_call(
- inp
+ inp, num
)
)
)
diff --git a/bin/export_audio.rb b/bin/export_audio.rb
@@ -40,7 +40,7 @@ end
if(not job)
$stderr.puts "Listing all available jobs"
$stderr.puts "=========================="
- DialJob.find(:all).each do |j|
+ DialJob.all.each do |j|
puts "#{j.id}\t#{j.started_at} --> #{j.completed_at}"
end
exit
@@ -51,13 +51,14 @@ end
begin
cnt = 0
- job = DialJob.find(job.to_i)
- job.dial_results.each do |r|
+ DialResult.where(:dial_job_id => job.to_i).find_each do |r|
next if not r.number
- next if r.audio.to_s.length == 0
+ m = r.media
+ next if not m
+ next if m.audio.to_s.length == 0
out = ::File.join(dir, "#{r.number}.raw")
::File.open(out, "wb") do |fd|
- fd.write( r.audio )
+ fd.write( m.audio )
end
cnt += 1
end
diff --git a/db/migrate/20121228171549_initial_schema.rb b/db/migrate/201212281…
@@ -0,0 +1,71 @@
+class InitialSchema < ActiveRecord::Migration
+ def up
+
+ # Require the intarray extension
+ execute("CREATE EXTENSION IF NOT EXISTS intarray")
+
+ create_table "dial_jobs" do |t|
+ t.timestamps
+ t.text "range"
+ t.integer "seconds"
+ t.integer "lines"
+ t.text "status"
+ t.integer "progress"
+ t.datetime "started_at"
+ t.datetime "completed_at"
+ t.boolean "processed"
+ t.text "cid_mask"
+ end
+
+ create_table "dial_results" do |t|
+ t.timestamps
+ t.text "number"
+ t.integer "dial_job_id"
+ t.integer "provider_id"
+ t.boolean "completed"
+ t.boolean "busy"
+ t.integer "seconds"
+ t.integer "ringtime"
+ t.boolean "processed"
+ t.datetime "processed_at"
+ t.text "cid"
+ t.float "peak_freq"
+ t.text "peak_freq_data"
+ t.text "sig_data"
+ t.text "line_type"
+ t.text "notes"
+ t.text "signatures"
+ t.integer "fprint", :array => true
+ end
+
+ create_table "dial_result_media" do |t|
+ t.integer "dial_result_id"
+ t.binary "audio"
+ t.binary "mp3"
+ t.binary "png_big"
+ t.binary "png_big_dots"
+ t.binary "png_big_freq"
+ t.binary "png_sig"
+ t.binary "png_sig_freq"
+ end
+
+ create_table "providers" do |t|
+ t.timestamps
+ t.text "name"
+ t.text "host"
+ t.integer "port"
+ t.text "user"
+ t.text "pass"
+ t.integer "lines"
+ t.boolean "enabled"
+ end
+
+ end
+
+ def down
+ remove_table "providers"
+ remove_table "dial_result_media"
+ remove_table "dial_results"
+ remove_table "dial_jobs"
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
@@ -11,12 +11,13 @@
#
# It's strongly recommended to check this file into your version control syste…
-ActiveRecord::Schema.define(:version => 20110801000003) do
+ActiveRecord::Schema.define(:version => 20121228171549) do
- # Require the intarray extension
- execute "CREATE EXTENSION IF NOT EXISTS intarray"
+ add_extension "intarray"
create_table "dial_jobs", :force => true do |t|
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.text "range"
t.integer "seconds"
t.integer "lines"
@@ -25,12 +26,23 @@ ActiveRecord::Schema.define(:version => 20110801000003) do
t.datetime "started_at"
t.datetime "completed_at"
t.boolean "processed"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
t.text "cid_mask"
end
+ create_table "dial_result_media", :force => true do |t|
+ t.integer "dial_result_id"
+ t.binary "audio"
+ t.binary "mp3"
+ t.binary "png_big"
+ t.binary "png_big_dots"
+ t.binary "png_big_freq"
+ t.binary "png_sig"
+ t.binary "png_sig_freq"
+ end
+
create_table "dial_results", :force => true do |t|
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.text "number"
t.integer "dial_job_id"
t.integer "provider_id"
@@ -38,10 +50,7 @@ ActiveRecord::Schema.define(:version => 20110801000003) do
t.boolean "busy"
t.integer "seconds"
t.integer "ringtime"
- t.text "rawfile"
t.boolean "processed"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
t.datetime "processed_at"
t.text "cid"
t.float "peak_freq"
@@ -50,25 +59,18 @@ ActiveRecord::Schema.define(:version => 20110801000003) do
t.text "line_type"
t.text "notes"
t.text "signatures"
- t.integer "fprint", :array => true
- t.binary "audio"
- t.binary "mp3"
- t.binary "png_big"
- t.binary "png_big_dots"
- t.binary "png_big_freq"
- t.binary "png_sig"
- t.binary "png_sig_freq"
+ t.integer "fprint", :array => true
end
create_table "providers", :force => true do |t|
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
t.text "name"
t.text "host"
t.integer "port"
t.text "user"
t.text "pass"
t.integer "lines"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
t.boolean "enabled"
end
diff --git a/lib/warvox/jobs/analysis.rb b/lib/warvox/jobs/analysis.rb
@@ -74,15 +74,7 @@ class Analysis < Base
end
def start_processing
- todo = ::DialResult.find_all_by_dial_job_id(@name)
- jobs = []
- todo.each do |r|
- next if r.processed
- next if not r.completed
- next if r.busy
- jobs << r
- end
-
+ jobs = ::DialResult.where(:dial_job_id => @name, :processed =>…
max_threads = WarVOX::Config.analysis_threads
while(not jobs.empty?)
@@ -102,29 +94,35 @@ class Analysis < Base
end
end
- def run_analyze_call(r)
- $stderr.puts "DEBUG: Processing audio for #{r.number}..."
+ def run_analyze_call(dr)
+ $stderr.puts "DEBUG: Processing audio for #{dr.number}..."
bin = File.join(WarVOX::Base, 'bin', 'analyze_result.rb')
tmp = Tempfile.new("Analysis")
begin
+ mr = dr.media
::File.open(tmp.path, "wb") do |fd|
- fd.write(r.audio)
+ fd.write(mr.audio)
end
- pfd = IO.popen("#{bin} '#{tmp.path}'")
+ pfd = IO.popen("#{bin} '#{tmp.path}' '#{ dr.number.gsub("'", '…
out = Marshal.load(pfd.read) rescue nil
pfd.close
return if not out
+ mf = dr.media_fields
out.each_key do |k|
- r[k] = out[k]
+ if mf.include?(k.to_s)
+ mr[k] = out[k]
+ else
+ dr[k] = out[k]
+ end
end
- r.processed_at = Time.now
- r.processed = true
+ dr.processed_at = Time.now
+ dr.processed = true
rescue ::Interrupt
ensure
@@ -132,24 +130,26 @@ class Analysis < Base
tmp.unlink
end
+ mr.save
+
true
end
# Takes the raw file path as an argument, returns a hash
- def analyze_call(input)
+ def analyze_call(input, num=nil)
return if not input
return if not File.exist?(input)
- bname = File.expand_path(File.dirname(input))
- num = File.basename(input)
- res = {}
+ bname = File.expand_path(File.dirname(input))
+ num ||= File.basename(input)
+ res = {}
#
# Create the signature database
#
raw = WarVOX::Audio::Raw.from_file(input)
- fft = KissFFT.fftr(8192, 8000, 1, raw.samples)
+ fft = KissFFT.fftr(8192, 8000, 1, raw.samples) || []
freq = raw.to_freq_sig_arr()
diff --git a/lib/warvox/jobs/dialer.rb b/lib/warvox/jobs/dialer.rb
@@ -44,7 +44,7 @@ class Dialer < Base
def get_providers
res = []
- ::Provider.find_all_by_enabled(true).each do |prov|
+ ::Provider.where(:enabled => true).all.each do |prov|
info = {
:name => prov.name,
:id => prov.id,
@@ -175,10 +175,13 @@ class Dialer < Base
res.seconds = (byte / 16000) # 8khz @…
res.ringtime = ring
res.processed = false
+ res.save
if(File.exists?(out))
File.open(out, "rb") do |fd|
- res.audio = fd.read(fd…
+ med = res.media
+ med.audio = fd.read(fd…
+ med.save
end
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.