Introduction
Introduction Statistics Contact Development Disclaimer Help
One more step closer to rails 4 compatibility - warvox - VoIP based wardialing …
Log
Files
Refs
README
---
commit 0475c3d988f08164826df337fd3db8464708b68a
parent 5015670e3a10cbb3c934858c0097b9d83b5e0ab0
Author: HD Moore <[email protected]>
Date: Mon, 8 Sep 2014 01:52:47 -0500
One more step closer to rails 4 compatibility
Diffstat:
M Gemfile | 5 +++--
M Gemfile.lock | 21 ++++++++-------------
A app/assets/datatables/jquery.dataT… | 0
A app/assets/datatables/jquery.datat… | 0
M app/assets/javascripts/application… | 2 +-
M app/assets/javascripts/bootstrap.j… | 6 ++----
M app/assets/stylesheets/application… | 1 +
M app/assets/stylesheets/application… | 6 ++++--
A app/assets/stylesheets/bootstrap_a… | 8 ++++++++
M app/assets/stylesheets/bootstrap_a… | 330 +++++++++++++++------------…
M app/controllers/analyze_controller… | 11 ++++-------
M app/controllers/calls_controller.rb | 6 ++----
M app/controllers/jobs_controller.rb | 6 ++----
M app/controllers/projects_controlle… | 6 ++----
M app/controllers/providers_controll… | 3 +--
M app/models/call.rb | 63 +++++++++++++++++++----------…
M app/views/layouts/application.html… | 2 +-
M bin/resetpw | 2 +-
M bin/worker.rb | 10 +++++-----
M bin/worker_manager.rb | 10 +++++-----
M config/environments/development.rb | 4 ----
M config/environments/production.rb | 3 ---
M config/initializers/warvox.rb | 2 +-
A config/locales/en.bootstrap.yml | 23 +++++++++++++++++++++++
M config/routes.rb | 56 ++++++++++++++++-------------…
25 files changed, 302 insertions(+), 284 deletions(-)
---
diff --git a/Gemfile b/Gemfile
@@ -1,6 +1,5 @@
source 'http://rubygems.org'
-ruby '1.9.3'
gem 'unicorn'
gem 'rails', '>=4.1.5', '< 5.0.0'
gem 'pg', '>=0.17'
@@ -10,15 +9,17 @@ gem 'jquery-datatables-rails', '>= 2.2.3'
# Integer array support (until Rails 4.0 is released)
# Git version required to work around this bug: https://github.com/dockyard/po…
-gem 'postgres_ext', :git => 'git://github.com/dockyard/postgres_ext.git'
+# gem 'postgres_ext', :git => 'git://github.com/dockyard/postgres_ext.git'
gem 'kissfft'
gem 'rex', '~> 2.0.3'
+gem 'bootstrap-sass', '>= 3.2.0'
gem 'sass-rails', '~> 4.0.2'
gem 'coffee-rails', '~> 4.0.1'
gem 'uglifier', '>= 1.0.3'
gem 'protected_attributes', '~> 1.0.7'
+gem 'autoprefixer-rails'
gem 'authlogic', '>= 3.4.0'
gem 'rails-settings-cached', '>= 0.4.1'
diff --git a/Gemfile.lock b/Gemfile.lock
@@ -1,17 +1,8 @@
GIT
- remote: git://github.com/dockyard/postgres_ext.git
- revision: 57bded66d1faba2c9e3090bcae43f795ac208b16
- specs:
- postgres_ext (2.3.0)
- activerecord (>= 4.0.0)
- arel (>= 4.0.1)
- pg_array_parser (~> 0.0.9)
-
-GIT
remote: git://github.com/hmoore-r7/reportable.git
- revision: f8532eeb704c511bb75b5bd4fd9656243c9b118b
+ revision: 073bc1657ee301f4c961f14247ef1a58cf38bd1f
specs:
- reportable (1.2.0)
+ reportable (1.3.1)
activerecord (>= 3.0)
activesupport (>= 3.0.0)
@@ -49,8 +40,12 @@ GEM
activerecord (>= 3.2)
activesupport (>= 3.2)
request_store (~> 1.0)
+ autoprefixer-rails (3.0.1.20140826)
+ execjs
bootstrap-navbar (2.2.0)
gem_config (~> 0.3)
+ bootstrap-sass (3.2.0.2)
+ sass (~> 3.2)
builder (3.2.2)
coffee-rails (4.0.1)
coffee-script (>= 2.2.0)
@@ -98,7 +93,6 @@ GEM
minitest (5.4.1)
multi_json (1.10.1)
pg (0.17.1)
- pg_array_parser (0.0.9)
polyglot (0.3.5)
protected_attributes (1.0.8)
activemodel (>= 4.0.1, < 5.0)
@@ -181,6 +175,8 @@ PLATFORMS
DEPENDENCIES
authlogic (>= 3.4.0)
+ autoprefixer-rails
+ bootstrap-sass (>= 3.2.0)
coffee-rails (~> 4.0.1)
dynamic_form (>= 1.1.4)
formtastic (>= 3.0.0)
@@ -190,7 +186,6 @@ DEPENDENCIES
kissfft
less-rails-bootstrap
pg (>= 0.17)
- postgres_ext!
protected_attributes (~> 1.0.7)
psych_shield
rails (>= 4.1.5, < 5.0.0)
diff --git a/app/assets/datatables/jquery.dataTables.css b/app/assets/datatable…
diff --git a/app/assets/datatables/jquery.datatables.css b/app/assets/datatable…
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/app…
@@ -5,7 +5,7 @@
//= require twitter/bootstrap
//= require bootstrap-lightbox
//= require dataTables/jquery.dataTables
-//= require dataTables/jquery.dataTables.bootstrap
+//= require dataTables/bootstrap/3/jquery.dataTables.bootstrap
//= require dataTables.hiddenTitle
//= require dataTables.filteringDelay
//= require dataTables.fnReloadAjax
diff --git a/app/assets/javascripts/bootstrap.js.coffee b/app/assets/javascript…
@@ -1,4 +1,3 @@
jQuery ->
- $("a[rel=popover]").popover()
- $(".tooltip").tooltip()
- $("a[rel=tooltip]").tooltip()
-\ No newline at end of file
+ $("a[rel~=popover], .has-popover").popover()
+ $("a[rel~=tooltip], .has-tooltip").tooltip()
diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/ap…
@@ -2,6 +2,7 @@
* This is a manifest file that'll automatically include all the stylesheets a…
* and any sub-directories. You're free to add application-wide styles to this…
* the top of the compiled file, but it's generally better to create a new fil…
+ *= require formtastic-bootstrap
*= require_self
*= require_tree .
*/
diff --git a/app/assets/stylesheets/application.css.scss.erb b/app/assets/style…
@@ -1,6 +1,6 @@
/*
*= require bootstrap_and_overrides
- */
+*/
/*
*= require_self
@@ -8,9 +8,11 @@
*= require formtastic-bootstrap
*= require formtastic-overrides
*= require bootstrap-lightbox
- *= require dataTables/jquery.dataTables.bootstrap
+ *= require jquery.dataTables
*/
+@import "bootstrap-sprockets";
+@import "bootstrap";
table.list {
td.actions {
diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css b/app/assets/st…
@@ -0,0 +1,7 @@
+/*
+ =require twitter-bootstrap-static/bootstrap
+
+ Use Font Awesome icons (default)
+ To use Glyphicons sprites instead of Font Awesome, replace with "require twi…
+ =require twitter-bootstrap-static/fontawesome
+ */
+\ No newline at end of file
diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css.less b/app/asse…
@@ -1,35 +1,23 @@
@import "twitter/bootstrap/bootstrap";
-@import "twitter/bootstrap/responsive";
// Set the correct sprite paths
-@iconSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings");
-@iconWhiteSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings-white…
+@iconSpritePath: image-url("twitter/bootstrap/glyphicons-halflings.png");
+@iconWhiteSpritePath: image-url("twitter/bootstrap/glyphicons-halflings-white.…
// Set the Font Awesome (Font Awesome is default. You can disable by commentin…
-// Note: If you use asset_path() here, your compiled bootstrap_and_overrides.c…
-// have the proper paths. So for now we use the absolute path.
-@fontAwesomeEotPath: asset-path("fontawesome-webfont.eot");
-@fontAwesomeEotPath_iefix: asset-path("fontawesome-webfont.eot#iefix");
-@fontAwesomeWoffPath: asset-path("fontawesome-webfont.woff");
-@fontAwesomeTtfPath: asset-path("fontawesome-webfont.ttf");
-@fontAwesomeSvgPath: asset-path("fontawesome-webfont.svg");
+@fontAwesomeEotPath: font-url("fontawesome-webfont.eot");
+@fontAwesomeEotPath_iefix: font-url("fontawesome-webfont.eot?#iefix");
+@fontAwesomeWoffPath: font-url("fontawesome-webfont.woff");
+@fontAwesomeTtfPath: font-url("fontawesome-webfont.ttf");
+@fontAwesomeSvgPath: font-url("fontawesome-webfont.svg#fontawesomeregular");
// Font Awesome
-@import "fontawesome";
+@import "fontawesome/font-awesome";
// Glyphicons
-//@import "twitter/bootstrap/sprites.less";
+//@import "twitter/bootstrap/glyphicons.less";
// Your custom LESS stylesheets goes here
-//
-// Since bootstrap was imported above you have access to its mixins which
-// you may use and inherit here
-//
-// If you'd like to override bootstrap's own variables, you can do so here as …
-// See http://twitter.github.com/bootstrap/customize.html#variables for their …
-//
-// Example:
-// @linkColor: #ff0000;
@sansFontFamily: "Trebuchet MS", Arial, Helvetica, sans-serif;
@@ -38,6 +26,9 @@
@darkGray: #29383f;
@lightGray: #666666;
@blue: #0197b8;
+@white: #ffffff;
+@yellow: yellow;
+@red: red;
@darkOrange: #BB4607;
@lightOrange: #F8ECE6;
@@ -66,166 +57,166 @@
// Datatables
.paginate_disabled_previous {
- display: none;
+ display: none;
}
.paginate_disabled_next {
- display: none;
+ display: none;
}
.paginate_enabled_previous {
- color: red;
- margin-right: 20px;
+ color: red;
+ margin-right: 20px;
}
.paginate_enabled_next {
- color: green;
+ color: green;
}
// End of DataTables
.sparkline {
- width: 100%;
- height: 30px;
+ width: 100%;
+ height: 30px;
}
.sparkline-title {
- text-align: center;
- font-size: 11px;
+ text-align: center;
+ font-size: 11px;
}
.call-detail {
- font-size: 10px;
+ font-size: 10px;
}
.project-header {
- margin-bottom: 30px;
- border-bottom: 1px solid #eeeeee;
+ margin-bottom: 30px;
+ border-bottom: 1px solid #eeeeee;
}
.zoom {
- background-color: @orange;
- height: 40px;
+ background-color: @orange;
+ height: 40px;
}
.stat-box {
- padding: 10px;
- background-color: white;
- border: 2px solid @darkGray;
- font-size: 16px;
- font-weight: bold;
- color: @darkGray;
- width: 55px;
- margin: auto auto;
- text-align: center;
-
- border-top-left-radius: 20px;
- border-top-right-radius: 20px;
- border-bottom-right-radius: 20px;
- border-bottom-left-radius: 20px;
+ padding: 10px;
+ background-color: white;
+ border: 2px solid @darkGray;
+ font-size: 16px;
+ font-weight: bold;
+ color: @darkGray;
+ width: 55px;
+ margin: auto auto;
+ text-align: center;
+
+ border-top-left-radius: 20px;
+ border-top-right-radius: 20px;
+ border-bottom-right-radius: 20px;
+ border-bottom-left-radius: 20px;
}
.stat-modem {
- background-color: white;
- border: 2px solid @red;
- color: @red;
+ background-color: white;
+ border: 2px solid @red;
+ color: @red;
}
.stat-nodata {
- background-color: #f4f4f4;
- border: 2px solid @darkGray;
- color: @darkGray;
- font-size: 24px;
+ background-color: #f4f4f4;
+ border: 2px solid @darkGray;
+ color: @darkGray;
+ font-size: 24px;
}
.stat-completed {
- background-color: white;
- border: 2px solid @orange;
- color: @darkGray;
+ background-color: white;
+ border: 2px solid @orange;
+ color: @darkGray;
}
.stat-voice {
- background-color: white;
- border: 2px solid @green;
- color: @darkGray;
+ background-color: white;
+ border: 2px solid @green;
+ color: @darkGray;
}
.stat-voicemail {
- background-color: white;
- border: 2px solid @blue;
- color: @darkGray;
+ background-color: white;
+ border: 2px solid @blue;
+ color: @darkGray;
}
.stat-fax {
- background-color: white;
- border: 2px solid @darkGray;
- color: @darkGray;
+ background-color: white;
+ border: 2px solid @darkGray;
+ color: @darkGray;
}
.stat-modem {
- background-color: white;
- border: 2px solid @red;
- color: @darkGray;
+ background-color: white;
+ border: 2px solid @red;
+ color: @darkGray;
}
.arrow-down {
- font-size: 18px;
- text-align: center;
- margin: auto auto;
- padding-top: 10px;
- padding-bottom: 10px;
- color: @darkOrange;
+ font-size: 18px;
+ text-align: center;
+ margin: auto auto;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ color: @darkOrange;
}
.arrow-right {
- font-size: 22px;
- text-align: center;
- margin: auto auto;
- padding-top: 10px;
- padding-bottom: 10px;
+ font-size: 22px;
+ text-align: center;
+ margin: auto auto;
+ padding-top: 10px;
+ padding-bottom: 10px;
}
.stat-subtitle {
- text-align: center;
- font-size: 12px;
- margin-top: 1px;
+ text-align: center;
+ font-size: 12px;
+ margin-top: 1px;
}
.fwd_match_span {
- width: 100px;
- padding-left: 20px;
- padding-right: 20px;
- padding-bottom: 5px;
- padding-top: 5px;
- font-weight: bold;
- color: white;
- text-align: center;
+ width: 100px;
+ padding-left: 20px;
+ padding-right: 20px;
+ padding-bottom: 5px;
+ padding-top: 5px;
+ font-weight: bold;
+ color: white;
+ text-align: center;
}
.filter-label {
- line-height: 16px;
- font-size: 16px;
- margin-right: 5px;
- padding-top: 5px;
- font-weight: bold;
+ line-height: 16px;
+ font-size: 16px;
+ margin-right: 5px;
+ padding-top: 5px;
+ font-weight: bold;
}
.filter-select {
- line-height: 14px;
- font-size: 14px;
- width: 120px;
- font-weight: bold;
+ line-height: 14px;
+ font-size: 14px;
+ width: 120px;
+ font-weight: bold;
}
.popover-title {
- line-height: 12px;
- font-size: 12px;
- text-align: center;
- font-weight: bold;
+ line-height: 12px;
+ font-size: 12px;
+ text-align: center;
+ font-weight: bold;
}
.popover-content {
@@ -233,83 +224,83 @@
}
.xtooltip {
- border-bottom: 1px dotted @blue;
- cursor: help;
+ border-bottom: 1px dotted @blue;
+ cursor: help;
}
.xpopover {
- border-bottom: 1px dotted @blue;
- cursor: help;
+ border-bottom: 1px dotted @blue;
+ cursor: help;
}
.progress-bar {
- margin-bottom: -2px;
+ margin-bottom: -2px;
}
.progress_pct {
- color: @darkGray;
- margin-left: 10px;
- font-weight: bold;
+ color: @darkGray;
+ margin-left: 10px;
+ font-weight: bold;
}
.task_args_formatted {
- padding:10px;
+ padding:10px;
}
.task_args_var {
- font-size: 12px;
- float: left;
- font-weight: bold;
- text-align: right;
+ font-size: 12px;
+ float: left;
+ font-weight: bold;
+ text-align: right;
}
.task_args_val {
- font-size: 14px;
- text-align: left;
- padding-left: 5px;
- float: auto;
+ font-size: 14px;
+ text-align: left;
+ padding-left: 5px;
+ float: auto;
}
.check-item {
- font-size: 18px;
- margin-bottom: 10px;
+ font-size: 18px;
+ margin-bottom: 10px;
}
.check-result {
- margin-left: 40px;
- width: 500px;
- font-size: 16px;
+ margin-left: 40px;
+ width: 500px;
+ font-size: 16px;
}
// Hacks to override active drop-down item background color and hover
.dropdown-menu .active > a {
- background-color: @white;
- background-image: none;
- color: @darkGray;
+ background-color: @white;
+ background-image: none;
+ color: @darkGray;
}
// Do not make active icons white
.dropdown-menu > .active > a > [class^="icon-"], .dropdown-menu > .active > a …
- color: @darkGray;
- background-image: url("/assets/twitter/bootstrap/glyphicons-halflings.…
+ color: @darkGray;
+ background-image: url("/assets/twitter/bootstrap/glyphicons-halflings.png");
}
.dropdown-menu .active > a:hover {
- background-color: @orange;
- background-image: none;
- color: @white;
+ background-color: @orange;
+ background-image: none;
+ color: @white;
}
.fconstrained {
- width: 400px;
+ width: 400px;
}
.project_description {
- height: 100px;
- padding: 5px;
+ height: 100px;
+ padding: 5px;
}
.project_includes {
- height: 100px;
- padding: 5px;
+ height: 100px;
+ padding: 5px;
}
body#login {
@@ -351,35 +342,35 @@ background-image: linear-gradient(to bottom, #EA5709 0%, …
}
#login-logo {
- margin-left: auto;
- margin-right: auto;
- width: 222px;
- height: 68px;
- margin-top: 60px;
+ margin-left: auto;
+ margin-right: auto;
+ width: 222px;
+ height: 68px;
+ margin-top: 60px;
}
#box {
- margin-left: auto;
- margin-right: auto;
- width: 350px;
- background: white;
- padding: 25px;
- margin-top: 20px;
- border: 1px solid #4A1C04;
- margin-bottom: 30px;
+ margin-left: auto;
+ margin-right: auto;
+ width: 350px;
+ background: white;
+ padding: 25px;
+ margin-top: 20px;
+ border: 1px solid #4A1C04;
+ margin-bottom: 30px;
}
.login-label {
- width: 120px;
- margin-right: 10px;
- margin-bottom: 5px;
- text-align: right;
- font-weight: bold;
- float: left;
+ width: 120px;
+ margin-right: 10px;
+ margin-bottom: 5px;
+ text-align: right;
+ font-weight: bold;
+ float: left;
}
.btn-login {
- margin-left: 130px;
+ margin-left: 130px;
}
.nav {
@@ -389,7 +380,7 @@ background-image: linear-gradient(to bottom, #EA5709 0%, #0…
}
.content {
- margin-top: 40px;
+ margin-top: 40px;
}
.accordion-toggle:hover {
@@ -397,18 +388,18 @@ background-image: linear-gradient(to bottom, #EA5709 0%, …
}
h1 {
- font-size: 24px;
- line-height: 30px;
+ font-size: 24px;
+ line-height: 30px;
}
h2 {
- font-size: 20px;
- line-height: 24px;
+ font-size: 20px;
+ line-height: 24px;
}
h3 {
- font-size: 16px;
- line-height: 18px;
+ font-size: 16px;
+ line-height: 18px;
}
.header {
@@ -481,4 +472,4 @@ table.dataTable tr td.sorting_1 {
}
.carousel-control {
background: #fff;
-}
+}
+\ No newline at end of file
diff --git a/app/controllers/analyze_controller.rb b/app/controllers/analyze_co…
@@ -1,9 +1,8 @@
class AnalyzeController < ApplicationController
def index
- @jobs = Job.paginate(
+ @jobs = Job.order('id DESC').paginate(
:page => params[:page],
- :order => 'id DESC',
:per_page => 30
)
end
@@ -14,14 +13,12 @@ class AnalyzeController < ApplicationController
@shown = params[:show]
if request.format.html?
- ltypes = Call.find( :all, :select => 'DISTINCT line_type', :co…
+ ltypes = Call.select('DISTINCT line_type').where(:job_id => @j…
res_types = {}
ltypes.each do |k|
next if not k
- res_types[k.capitalize.to_sym] = Call.count(
- :conditions => ['job_id = ? and line_type = ?'…
- )
+ res_types[k.capitalize.to_sym] = Call.where(:job_id =>…
end
@lines_by_type = res_types
@@ -47,7 +44,7 @@ class AnalyzeController < ApplicationController
calls_search
@results_total_display_count = Call.where(@search_conditions).count()
- @results = Call.where(@search_conditions).includes(:provider).limit(@res…
+ @results = Call.where(@search_conditions).includes(:provider).limit(@resul…
end
diff --git a/app/controllers/calls_controller.rb b/app/controllers/calls_contro…
@@ -3,9 +3,8 @@ class CallsController < ApplicationController
# GET /calls
# GET /calls.xml
def index
- @jobs = @project.jobs.where('task = ? AND completed_at IS NOT NULL', 'dial…
+ @jobs = @project.jobs.order('id DESC').where('task = ? AND completed_at IS…
:page => params[:page],
- :order => 'id DESC',
:per_page => 30
)
@@ -18,9 +17,8 @@ class CallsController < ApplicationController
# GET /calls/1/view
# GET /calls/1/view.xml
def view
- @calls = Call.where(:job_id => params[:id]).paginate(
+ @calls = Call.order('id DESC').where(:job_id => params[:id]).paginate(
:page => params[:page],
- :order => 'number ASC',
:per_page => 30
)
diff --git a/app/controllers/jobs_controller.rb b/app/controllers/jobs_controll…
@@ -7,9 +7,8 @@ class JobsController < ApplicationController
@submitted_jobs = Job.where(:status => ['submitted', 'schedule…
@active_jobs = Job.where(:status => 'running', :completed_a…
- @inactive_jobs = Job.where('status NOT IN (?)', ['submitted',…
+ @inactive_jobs = Job.order('id DESC').where('status NOT IN (?…
:page => params[:page],
- :order => 'id DESC',
:per_page => 30
)
@@ -27,9 +26,8 @@ class JobsController < ApplicationController
end
def results
- @jobs = @project.jobs.where('(task = ? OR task = ?) AND comple…
+ @jobs = @project.jobs.order('id DESC').where('(task = ? OR tas…
:page => params[:page],
- :order => 'id DESC',
:per_page => 30
)
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_…
@@ -1,9 +1,8 @@
class ProjectsController < ApplicationController
def index
- @projects = Project.paginate(
+ @projects = Project.order('id DESC').paginate(
:page => params[:page],
- :order => 'id DESC',
:per_page => 10
)
@@ -18,9 +17,8 @@ class ProjectsController < ApplicationController
def show
@project = Project.find(params[:id])
@active_jobs = @project.jobs.where(:status => 'running', :comp…
- @inactive_jobs = @project.jobs.where('status NOT IN (?)…
+ @inactive_jobs = @project.jobs.order('id DESC').where('…
:page => params[:page],
- :order => 'id DESC',
:per_page => 30
)
diff --git a/app/controllers/providers_controller.rb b/app/controllers/provider…
@@ -2,9 +2,8 @@ class ProvidersController < ApplicationController
def index
- @providers = Provider.paginate(
+ @providers = Provider.order('id DESC').paginate(
:page => params[:page],
- :order => 'id DESC',
:per_page => 10
)
diff --git a/app/models/call.rb b/app/models/call.rb
@@ -15,27 +15,42 @@ class Call < ActiveRecord::Base
belongs_to :job
has_one :call_medium, :dependent => :delete
- has_many :matches, :class_name => 'Call', :finder_sql => proc {
- 'SELECT calls.*, ' +
- " (( icount(\'{#{fprint.map{|x| x.to_s}.join(",")}}\'::int[] & calls.fpri…
- 'FROM calls ' +
- 'WHERE icount(calls.fprint) > 0 AND ' +
- "calls.job_id = \'#{job_id}\' AND " +
- "calls.id != \'#{id}\' " +
-# "AND (( icount(\'{#{fprint.map{|x| x.to_s}.join(",")}}\'::int[] & calls.f…
- 'ORDER BY matchscore DESC'
- }
-
- has_many :matches_all_jobs, :class_name => 'Call', :finder_sql => proc {
- 'SELECT calls.*, ' +
- " (( icount(\'{#{fprint.map{|x| x.to_s}.join(",")}}\'::int[] & calls.fpri…
- 'FROM calls ' +
- 'WHERE icount(calls.fprint) > 0 AND ' +
- "calls.id != \'#{id}\' " +
-# "AND (( icount(\'{#{fprint.map{|x| x.to_s}.join(",")}}\'::int[] & calls.fpr…
- 'ORDER BY matchscore DESC'
- }
+ def matches
+ # "AND (( icount(\'{#{fprint.map{|x| x.to_s}.join(",")}}\'::int[] & cal…
+ self.find_by_sql([
+ 'SELECT calls.*, ' +
+ " (( icount(?::int[] & calls.fprint::int[]) / icount(?::int[])::float )…
+ 'FROM calls ' +
+ 'WHERE icount(calls.fprint) > 0 AND ' +
+ "calls.job_id = ? AND " +
+ "calls.id != ? " +
+ 'ORDER BY matchscore DESC',
+ fprint_map,
+ fprint_map,
+ self.job_id,
+ self.id
+ ])
+ end
+
+ def matches_all_jobs
+ # "AND (( icount(\'{#{fprint.map{|x| x.to_s}.join(",")}}\'::int[] & cal…
+ self.find_by_sql([
+ 'SELECT calls.*, ' +
+ " (( icount(?::int[] & calls.fprint::int[]) / icount(?::int[])::float )…
+ 'FROM calls ' +
+ 'WHERE icount(calls.fprint) > 0 AND ' +
+ "calls.id != ? " +
+ 'ORDER BY matchscore DESC',
+ fprint_map,
+ fprint_map,
+ self.id
+ ])
+ end
+
+ def fprint_map
+ @fprint_map ||= "{" + fprint.map{|x| x.to_s}.join(",") + "}"
+ end
after_save :update_linked_line
@@ -44,19 +59,19 @@ class Call < ActiveRecord::Base
scope_limit = ""
case scope
when 'job'
- scope_limit = "calls.job_id = \'#{job_id}\' AND "
+ scope_limit = "calls.job_id = \'#{job_id.to_i}\' AND "
when 'project'
- scope_limit = "calls.project_id = \'#{project_id}\' AND "
+ scope_limit = "calls.project_id = \'#{project_id.to_i}\' AND "
end
query =
'SELECT calls.*, ' +
- " (( icount(\'{#{fprint.map{|x| x.to_s}.join(",")}}\'::int[] & calls.fp…
+ " (( icount(\'{#{fprint_map}}\'::int[] & calls.fprint::int[]) / icount(…
'FROM calls ' +
'WHERE icount(calls.fprint) > 0 AND ' +
scope_limit +
"calls.id != \'#{id}\' " +
- "AND (( icount(\'{#{fprint.map{|x| x.to_s}.join(",")}}\'::int[] & calls.…
+ "AND (( icount(\'#{fprint_map}\'::int[] & calls.fprint::int[]) / icount(…
'ORDER BY matchscore DESC'
Call.paginate_by_sql(query, :page => page, :per_page => per_page)
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/applica…
@@ -57,7 +57,7 @@
<% if Project.count > 0 %>
<%= drop_down_divider %>
<%= drop_down_header "Recent P…
- <% Project.find(:all, :order =…
+ <% Project.order('ID DESC').li…
<%= menu_item raw('<i …
<% end %>
<% end %>
diff --git a/bin/resetpw b/bin/resetpw
@@ -36,7 +36,7 @@ def generate_password
end
-user = uname ? User.find_by_login(uname) : User.find(:first)
+user = uname ? User.find_by_login(uname) : User.first
if uname and not user
$stderr.puts "[-] User #{uname} was not found"
exit(1)
diff --git a/bin/worker.rb b/bin/worker.rb
@@ -30,7 +30,7 @@ def stop
@task.stop() rescue nil
end
if @job
- Job.update_all({ :status => 'stopped', :completed_at => Time.n…
+ Job.where(id: @job_id).update_all({ status: 'stopped', complet…
end
exit(0)
end
@@ -51,7 +51,7 @@ trap("SIGTERM") { stop() }
jid = jid.to_i
-@job = Job.where(:id => jid).first
+@job = Job.where(id: jid).first
unless @job
$stderr.puts "Error: Specified job not found"
@@ -61,7 +61,7 @@ end
$0 = "warvox worker: #{jid} "
-Job.update_all({ :started_at => Time.now.utc, :status => 'running'}, { :id => …
+Job.where(id: @job.id).update_all({ started_at: Time.now.utc, status: 'running…
args = Marshal.load(@job.args) rescue {}
@@ -78,7 +78,7 @@ when 'analysis'
@task = WarVOX::Jobs::Analysis.new(@job.id, args)
@task.start
else
- Job.update_all({ :error => 'unsupported', :status => 'error' }, { :id …
+ Job.where(id: @job.id).update_all({ error: 'unsupported', status: 'err…
end
@job.update_progress(100)
@@ -87,5 +87,5 @@ rescue ::SignalException, ::SystemExit
raise $!
rescue ::Exception => e
WarVOX::Log.warn("Worker #{@job.id} #{@job.task} threw an exception: #…
- Job.update_all({ :error => "Exception: #{e.class} #{e}", :status => 'e…
+ Job.where(id: @job.id).update_all({ error: "Exception: #{e.class} #{e}…
end
diff --git a/bin/worker_manager.rb b/bin/worker_manager.rb
@@ -95,7 +95,7 @@ def clear_completed_jobs
@jobs = @jobs.reject{|x| dead_pids.include?( x[:pid] ) }
# Mark failed/crashed jobs as completed
- Job.update_all({ :completed_at => Time.now.utc }, { :id => dead_jids, …
+ Job.where(id: dead_jids, completed_at: nil).update_all({completed_at: …
end
def clear_stale_jobs
@@ -131,21 +131,21 @@ def clear_stale_jobs
# Mark these jobs as abandoned
if dead.length > 0
WarVOX::Log.debug("Worker Manager is marking #{dead.length} jo…
- Job.update_all({ :locked_by => nil, :status => 'abandoned' }, …
+ Job.where(:id => dead).update_all({locked_by: nil, status: 'ab…
end
end
def schedule_submitted_jobs
loop do
# Look for a candidate job with no current owner
- j = Job.where(:status => 'submitted', :locked_by => nil).limi…
+ j = Job.where(status: 'submitted', locked_by: nil).limit(1).f…
return unless j
# Try to get a lock on this job
- Job.update_all({:locked_by => @cookie, :locked_at => Time.now.…
+ Job.where(id: j.id, locked_by: nil).update_all({locked_by: @co…
# See if we actually got the lock
- j = Job.where(:id => j.id, :status => 'scheduled', :locked_by…
+ j = Job.where(id: j.id, status: 'scheduled', locked_by: @cook…
# Try again if we lost the race,
next unless j
diff --git a/config/environments/development.rb b/config/environments/developme…
@@ -27,10 +27,6 @@ Web::Application.configure do
config.log_level = :debug
- # Log the query plan for queries taking more than this (works
- # with SQLite, MySQL, and PostgreSQL)
- config.active_record.auto_explain_threshold_in_seconds = 0.75
-
# Do not compress assets
config.assets.compress = false
diff --git a/config/environments/production.rb b/config/environments/production…
@@ -64,7 +64,4 @@ Web::Application.configure do
# Eager load
config.eager_load = true
- # Log the query plan for queries taking more than this (works
- # with SQLite, MySQL, and PostgreSQL)
- # config.active_record.auto_explain_threshold_in_seconds = 0.5
end
diff --git a/config/initializers/warvox.rb b/config/initializers/warvox.rb
@@ -1,3 +1,3 @@
# Extend PostgreSQL
-require 'postgres_ext'
+# require 'postgres_ext'
diff --git a/config/locales/en.bootstrap.yml b/config/locales/en.bootstrap.yml
@@ -0,0 +1,23 @@
+# Sample localization file for English. Add more files in this directory for o…
+# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for s…
+
+en:
+ breadcrumbs:
+ application:
+ root: "Index"
+ pages:
+ pages: "Pages"
+ helpers:
+ actions: "Actions"
+ links:
+ back: "Back"
+ cancel: "Cancel"
+ confirm: "Are you sure?"
+ destroy: "Delete"
+ new: "New"
+ edit: "Edit"
+ titles:
+ edit: "Edit %{model}"
+ save: "Save %{model}"
+ new: "New %{model}"
+ delete: "Delete %{model}"
diff --git a/config/routes.rb b/config/routes.rb
@@ -1,44 +1,44 @@
Web::Application.routes.draw do
- match "login" => "user_sessions#new", :as => "login"
- match "logout" => "user_sessions#destroy", :as => "logout"
+ get "login" => "user_sessions#new", :as => "login"
+ get "logout" => "user_sessions#destroy", :as => "logout"
resources :user_sessions
- match '/projects/:project_id/all' => 'projects#index', :…
+ get '/projects/:project_id/all' => 'projects#index', :as…
- match '/jobs/dial' => 'jobs#new_dialer', :as => :new_dialer_job
- match '/projects/:project_id/jobs/dial' => 'jobs#new_dialer', …
- match '/jobs/dialer' => 'jobs#dialer', :as => :dialer_job
+ get '/jobs/dial' => 'jobs#new_dialer', :as => :new_dialer_job
+ get '/projects/:project_id/jobs/dial' => 'jobs#new_dialer', :a…
+ put '/jobs/dialer' => 'jobs#dialer', :as => :dialer_job
- match '/jobs/analyze' => 'jobs#new_analyze', :as => :new_analyze_j…
- match '/projects/:project_id/jobs/analyze' => 'jobs#new_analyze', …
- match '/jobs/analyzer' => 'jobs#analyzer', :as => :analyzer_job
+ get '/jobs/analyze' => 'jobs#new_analyze', :as => :new_analyze_job
+ get '/projects/:project_id/jobs/analyze' => 'jobs#new_analyze', :a…
+ put '/jobs/analyzer' => 'jobs#analyzer', :as => :analyzer_job
- match '/projects/:project_id/jobs/identify' => 'jobs#new_identify', …
- match '/jobs/identifier' => 'jobs#identifier', :as => :identifier_job
+ get '/projects/:project_id/jobs/identify' => 'jobs#new_identify', :a…
+ put '/jobs/identifier' => 'jobs#identifier', :as => :identifier_job
- match '/jobs/:id/stop' => 'jobs#stop', :as => :stop_job
- match '/jobs/:id/calls/purge' => "jobs#purge_calls", :as => :purge_calls_j…
+ get '/jobs/:id/stop' => 'jobs#stop', :as => :stop_job
+ post '/jobs/:id/calls/purge' => "jobs#purge_calls", :as => :purge_calls_job
- match '/projects/:project_id/calls/purge' => "jobs#purge_calls", :as => :p…
+ post '/projects/:project_id/calls/purge' => "jobs#purge_calls", :as => :pu…
- match '/projects/:project_id/scans' => 'jobs#results', :as => :res…
- match '/projects/:project_id/scans/:id' => 'jobs#view_results', :as =>…
- match '/projects/:project_id/scans/:id/analyze' => 'jobs#analyze_job', :…
- match '/projects/:project_id/scans/:id/reanalyze' => 'jobs#reanalyze_job',…
+ get '/projects/:project_id/scans' => 'jobs#results', :as => :resul…
+ get '/projects/:project_id/scans/:id' => 'jobs#view_results', :as => :…
+ get '/projects/:project_id/scans/:id/analyze' => 'jobs#analyze_job', :as…
+ get '/projects/:project_id/scans/:id/reanalyze' => 'jobs#reanalyze_job', :…
- match '/projects/:project_id/calls/analyze' => 'jobs#analyze_project',…
- match '/projects/:project_id/calls/identify' => 'jobs#identify_project'…
+ get '/projects/:project_id/calls/analyze' => 'jobs#analyze_project', :…
+ get '/projects/:project_id/calls/identify' => 'jobs#identify_project', …
- match '/projects/:project_id/analyze' => 'analyze#index', :as =>…
- match '/call/:result_id.:type' => 'analyze#resource', :as …
- match '/projects/:project_id/analyze/:id/view' => 'analyze#view', :as => …
+ get '/projects/:project_id/analyze' => 'analyze#index', :as => :…
+ get '/call/:result_id.:type' => 'analyze#resource', :as =>…
+ get '/projects/:project_id/analyze/:id/view' => 'analyze#view', :as => :v…
- match '/projects/:project_id/analyze/:job_id/:call_id/matches' => 'analyz…
- match '/projects/:project_id/analyze/:call_id/matches' => 'analyze#view_m…
+ get '/projects/:project_id/analyze/:job_id/:call_id/matches' => 'analyze#…
+ get '/projects/:project_id/analyze/:call_id/matches' => 'analyze#view_mat…
resources :settings
resources :providers
@@ -47,9 +47,9 @@ Web::Application.routes.draw do
resources :jobs
resources :calls
- match '/about' => 'home#about', :as => :about
- match '/help' => 'home#help', :as => :help
- match '/check' => 'home#check', :as => :check
+ get '/about' => 'home#about', :as => :about
+ get '/help' => 'home#help', :as => :help
+ get '/check' => 'home#check', :as => :check
root :to => "projects#index"
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.