flare 0.4.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of flare might be problematic. Click here for more details.
- data/.document +5 -0
- data/.gitignore +22 -0
- data/LICENSE +20 -0
- data/README.rdoc +18 -0
- data/Rakefile +55 -0
- data/VERSION +1 -0
- data/flare.gemspec +66 -0
- data/lib/flare/active_record.rb +102 -0
- data/lib/flare/collection.rb +47 -0
- data/lib/flare/configuration.rb +64 -123
- data/lib/flare/index_builder.rb +24 -0
- data/lib/flare/session.rb +142 -0
- data/lib/flare/tasks.rb +18 -0
- data/lib/flare.rb +19 -537
- data/test/helper.rb +10 -0
- data/test/test_flare.rb +7 -0
- metadata +89 -242
- checksums.yaml +0 -7
- data/CHANGELOG.md +0 -3
- data/LICENSE.txt +0 -21
- data/README.md +0 -148
- data/app/controllers/flare/application_controller.rb +0 -30
- data/app/controllers/flare/jobs_controller.rb +0 -55
- data/app/controllers/flare/requests_controller.rb +0 -73
- data/app/controllers/flare/spans_controller.rb +0 -101
- data/app/helpers/flare/application_helper.rb +0 -168
- data/app/views/flare/jobs/index.html.erb +0 -69
- data/app/views/flare/jobs/show.html.erb +0 -323
- data/app/views/flare/requests/index.html.erb +0 -120
- data/app/views/flare/requests/show.html.erb +0 -498
- data/app/views/flare/spans/index.html.erb +0 -112
- data/app/views/flare/spans/show.html.erb +0 -184
- data/app/views/layouts/flare/application.html.erb +0 -126
- data/config/routes.rb +0 -20
- data/exe/flare +0 -9
- data/lib/flare/backoff_policy.rb +0 -73
- data/lib/flare/cli/doctor_command.rb +0 -129
- data/lib/flare/cli/output.rb +0 -45
- data/lib/flare/cli/setup_command.rb +0 -404
- data/lib/flare/cli/status_command.rb +0 -47
- data/lib/flare/cli.rb +0 -50
- data/lib/flare/client_headers.rb +0 -39
- data/lib/flare/deadline.rb +0 -27
- data/lib/flare/engine.rb +0 -45
- data/lib/flare/filtering_span_processor.rb +0 -429
- data/lib/flare/http_metrics_config.rb +0 -101
- data/lib/flare/http_transport.rb +0 -76
- data/lib/flare/lifecycle.rb +0 -39
- data/lib/flare/marker.rb +0 -106
- data/lib/flare/metric_counter.rb +0 -51
- data/lib/flare/metric_flusher.rb +0 -279
- data/lib/flare/metric_key.rb +0 -42
- data/lib/flare/metric_span_processor.rb +0 -470
- data/lib/flare/metric_storage.rb +0 -67
- data/lib/flare/metric_submitter.rb +0 -239
- data/lib/flare/recording_batch_span_processor.rb +0 -238
- data/lib/flare/rule_manager.rb +0 -141
- data/lib/flare/sampler.rb +0 -130
- data/lib/flare/source_location.rb +0 -113
- data/lib/flare/sqlite_exporter.rb +0 -334
- data/lib/flare/storage/sqlite.rb +0 -794
- data/lib/flare/storage.rb +0 -54
- data/lib/flare/trace_blob.rb +0 -116
- data/lib/flare/trace_exporter.rb +0 -182
- data/lib/flare/trace_health_reporter.rb +0 -74
- data/lib/flare/upload_url_pool.rb +0 -108
- data/lib/flare/version.rb +0 -5
- data/lib/flare/web_marker_subscriber.rb +0 -76
- data/public/flare-assets/flare.css +0 -1245
- data/public/flare-assets/images/flipper.png +0 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
module Flare
|
|
2
|
+
class Session
|
|
3
|
+
RESULT_LIMIT = 1000
|
|
4
|
+
PER_PAGE = 16
|
|
5
|
+
|
|
6
|
+
def connection
|
|
7
|
+
@connection ||= RSolr.connect(:url => Flare::Configuration.client.url)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
delegate :commit, :optimize, :to => :connection
|
|
11
|
+
|
|
12
|
+
def search_for_ids(*args)
|
|
13
|
+
response = execute(*args)
|
|
14
|
+
Flare::Collection.ids_from_response(response, response[:request][:page], response[:request][:per_page], response[:request])
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def search(*args)
|
|
18
|
+
response = execute(*args)
|
|
19
|
+
Flare::Collection.create_from_response(response, response[:request][:page], response[:request][:per_page], response[:request])
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def count(*args)
|
|
23
|
+
execute(*args)[:response][:numFound]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def index(*objects)
|
|
27
|
+
objects = ensure_searchable(objects)
|
|
28
|
+
connection.add(objects.collect(&:to_solr_doc))
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def index!(*objects)
|
|
32
|
+
index(objects)
|
|
33
|
+
commit
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def remove(*objects)
|
|
37
|
+
objects = ensure_searchable(objects)
|
|
38
|
+
connection.delete_by_id(objects.collect(&:solr_document_id))
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def remove!(*objects)
|
|
42
|
+
remove(objects)
|
|
43
|
+
commit
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def remove_all(*types)
|
|
47
|
+
types = Array(types).flatten.select { |type| type.searchable? }
|
|
48
|
+
connection.delete_by_query(types.map { |type| "type:#{type.name}" }.join(' OR '))
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def remove_all!(*types)
|
|
52
|
+
remove_all(types)
|
|
53
|
+
commit
|
|
54
|
+
optimize
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
def execute(*args)
|
|
59
|
+
options = args.extract_options!
|
|
60
|
+
|
|
61
|
+
options.reverse_merge!({
|
|
62
|
+
:page => 1,
|
|
63
|
+
:per_page => PER_PAGE,
|
|
64
|
+
:limit => RESULT_LIMIT,
|
|
65
|
+
:fields => '* score',
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
options.assert_valid_keys(:filter, :types, :page, :per_page, :limit, :fields, :order, :facet)
|
|
69
|
+
|
|
70
|
+
query = {
|
|
71
|
+
:q => args,
|
|
72
|
+
:fq => Array(options[:filter]).flatten,
|
|
73
|
+
:fl => options[:fields],
|
|
74
|
+
:start => start = (options[:page] -1) * options[:per_page],
|
|
75
|
+
:rows => options[:per_page]
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if options[:facets]
|
|
79
|
+
query[:facets] = true
|
|
80
|
+
query['facet.field'] = options[:facets][:fields]
|
|
81
|
+
query['facet.query'] = options[:facets][:queries]
|
|
82
|
+
query['facet.mincount'] = options[:facets][:mincount] || 1
|
|
83
|
+
query["facet.limit"] = options[:facets][:limit]
|
|
84
|
+
|
|
85
|
+
query["facet.missing"] = @params[:facets][:missing]
|
|
86
|
+
query["facet.mincount"] = @params[:facets][:mincount]
|
|
87
|
+
query["facet.prefix"] = @params[:facets][:prefix]
|
|
88
|
+
query["facet.offset"] = @params[:facets][:offset]
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
if options[:types]
|
|
93
|
+
query[:fq] << Array(options[:types]).map {|type| "type:#{type}"}.join(" OR ")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
query[:q] = query.delete(:fq) if query[:q].blank?
|
|
97
|
+
|
|
98
|
+
::ActiveRecord::Base.logger.debug(<<-SOLR.squish)
|
|
99
|
+
\e[4;32mSolr Query:\e[0;1m
|
|
100
|
+
#{query[:q].join(', ')}
|
|
101
|
+
#{"(#{query[:fq].join(' AND ')})," if query[:fq] }
|
|
102
|
+
sort: #{query[:order]}
|
|
103
|
+
start: #{query[:start]},
|
|
104
|
+
rows: #{query[:rows]}
|
|
105
|
+
SOLR
|
|
106
|
+
|
|
107
|
+
response = connection.select(query)
|
|
108
|
+
response[:request] = query
|
|
109
|
+
response[:request][:page] = options[:page]
|
|
110
|
+
response[:request][:per_page] = options[:per_page]
|
|
111
|
+
response.with_indifferent_access
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def ensure_searchable(*objects)
|
|
115
|
+
Array(objects).flatten.select { |object| object.class.searchable? }
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def prepare_query(query)
|
|
119
|
+
query[:page] ||= query[:page] ? query[:page].to_i : 1
|
|
120
|
+
query[:per_page] ||= PER_PAGE
|
|
121
|
+
query[:limit] ||= RESULT_LIMIT
|
|
122
|
+
query[:fields] ||= '* score'
|
|
123
|
+
query
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# I dont like this... Can we move it to hash if a library like ActiveSupport doesn't already have it?
|
|
127
|
+
def symbolize_keys(hash)
|
|
128
|
+
hash.inject({}){|result, (key, value)|
|
|
129
|
+
new_key = case key
|
|
130
|
+
when String then key.to_sym
|
|
131
|
+
else key
|
|
132
|
+
end
|
|
133
|
+
new_value = case value
|
|
134
|
+
when Hash then symbolize_keys(value)
|
|
135
|
+
else value
|
|
136
|
+
end
|
|
137
|
+
result[new_key] = new_value
|
|
138
|
+
result
|
|
139
|
+
}
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
data/lib/flare/tasks.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'escape'
|
|
2
|
+
|
|
3
|
+
namespace :flare do
|
|
4
|
+
desc 'Rebuild the Solr index for all searchable models'
|
|
5
|
+
task :rebuild_index => :environment do
|
|
6
|
+
Flare.indexed_models.each do |model|
|
|
7
|
+
puts "Clearing index for #{model.name}..."
|
|
8
|
+
model.clear_solr_index
|
|
9
|
+
|
|
10
|
+
puts "Rebuilding index for #{model.name}..."
|
|
11
|
+
model.rebuild_solr_index
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
puts "Optimizing..."
|
|
15
|
+
Flare.session.commit
|
|
16
|
+
Flare.session.optimize
|
|
17
|
+
end
|
|
18
|
+
end
|