flare 0.4.2 → 1.4.4

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.

Files changed (70) hide show
  1. data/.document +5 -0
  2. data/.gitignore +22 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +18 -0
  5. data/Rakefile +55 -0
  6. data/VERSION +1 -0
  7. data/flare.gemspec +66 -0
  8. data/lib/flare/active_record.rb +111 -0
  9. data/lib/flare/collection.rb +47 -0
  10. data/lib/flare/configuration.rb +64 -123
  11. data/lib/flare/index_builder.rb +29 -0
  12. data/lib/flare/session.rb +150 -0
  13. data/lib/flare/tasks.rb +18 -0
  14. data/lib/flare.rb +27 -524
  15. data/test/helper.rb +10 -0
  16. data/test/test_flare.rb +7 -0
  17. metadata +89 -242
  18. checksums.yaml +0 -7
  19. data/CHANGELOG.md +0 -3
  20. data/LICENSE.txt +0 -21
  21. data/README.md +0 -148
  22. data/app/controllers/flare/application_controller.rb +0 -30
  23. data/app/controllers/flare/jobs_controller.rb +0 -55
  24. data/app/controllers/flare/requests_controller.rb +0 -73
  25. data/app/controllers/flare/spans_controller.rb +0 -101
  26. data/app/helpers/flare/application_helper.rb +0 -168
  27. data/app/views/flare/jobs/index.html.erb +0 -69
  28. data/app/views/flare/jobs/show.html.erb +0 -323
  29. data/app/views/flare/requests/index.html.erb +0 -120
  30. data/app/views/flare/requests/show.html.erb +0 -498
  31. data/app/views/flare/spans/index.html.erb +0 -112
  32. data/app/views/flare/spans/show.html.erb +0 -184
  33. data/app/views/layouts/flare/application.html.erb +0 -126
  34. data/config/routes.rb +0 -20
  35. data/exe/flare +0 -9
  36. data/lib/flare/backoff_policy.rb +0 -73
  37. data/lib/flare/cli/doctor_command.rb +0 -129
  38. data/lib/flare/cli/output.rb +0 -45
  39. data/lib/flare/cli/setup_command.rb +0 -404
  40. data/lib/flare/cli/status_command.rb +0 -47
  41. data/lib/flare/cli.rb +0 -50
  42. data/lib/flare/client_headers.rb +0 -39
  43. data/lib/flare/deadline.rb +0 -27
  44. data/lib/flare/engine.rb +0 -45
  45. data/lib/flare/filtering_span_processor.rb +0 -429
  46. data/lib/flare/http_metrics_config.rb +0 -101
  47. data/lib/flare/http_transport.rb +0 -76
  48. data/lib/flare/lifecycle.rb +0 -78
  49. data/lib/flare/marker.rb +0 -106
  50. data/lib/flare/metric_counter.rb +0 -51
  51. data/lib/flare/metric_flusher.rb +0 -281
  52. data/lib/flare/metric_key.rb +0 -42
  53. data/lib/flare/metric_span_processor.rb +0 -470
  54. data/lib/flare/metric_storage.rb +0 -67
  55. data/lib/flare/metric_submitter.rb +0 -239
  56. data/lib/flare/recording_batch_span_processor.rb +0 -238
  57. data/lib/flare/rule_manager.rb +0 -141
  58. data/lib/flare/sampler.rb +0 -130
  59. data/lib/flare/source_location.rb +0 -113
  60. data/lib/flare/sqlite_exporter.rb +0 -334
  61. data/lib/flare/storage/sqlite.rb +0 -794
  62. data/lib/flare/storage.rb +0 -54
  63. data/lib/flare/trace_blob.rb +0 -116
  64. data/lib/flare/trace_exporter.rb +0 -182
  65. data/lib/flare/trace_health_reporter.rb +0 -74
  66. data/lib/flare/upload_url_pool.rb +0 -108
  67. data/lib/flare/version.rb +0 -5
  68. data/lib/flare/web_marker_subscriber.rb +0 -76
  69. data/public/flare-assets/flare.css +0 -1245
  70. data/public/flare-assets/images/flipper.png +0 -0
@@ -0,0 +1,150 @@
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
+ objects.collect(&:to_solr_doc).each do |doc|
29
+ connection.update(RSolr::Message::Generator.new.add(doc[:fields], doc[:attributes]))
30
+ # connection.add(doc[:fields], doc[:attributes])
31
+ end
32
+ end
33
+
34
+ def index!(*objects)
35
+ index(objects)
36
+ commit
37
+ end
38
+
39
+ def remove(*objects)
40
+ objects = ensure_searchable(objects)
41
+ connection.delete_by_id(objects.collect(&:solr_document_id))
42
+ end
43
+
44
+ def remove!(*objects)
45
+ remove(objects)
46
+ commit
47
+ end
48
+
49
+ def remove_all(*types)
50
+ types = Array(types).flatten.select { |type| type.searchable? }
51
+ connection.delete_by_query(types.map { |type| "type:#{type.name}" }.join(' OR '))
52
+ end
53
+
54
+ def remove_all!(*types)
55
+ remove_all(types)
56
+ commit
57
+ optimize
58
+ end
59
+
60
+ private
61
+ def execute(*args)
62
+ options = args.extract_options!
63
+
64
+ options.assert_valid_keys(:q, :fq, :types, :page, :per_page, :limit, :fl, :sort, :facet, :mlt)
65
+
66
+ options.reverse_merge!({
67
+ :page => 1,
68
+ :per_page => PER_PAGE,
69
+ :limit => RESULT_LIMIT,
70
+ :fields => '* score',
71
+ })
72
+
73
+ query = {
74
+ :q => Array(options[:q] || (args.blank? ? "*:*" : args)).flatten,
75
+ :fq => Array(options[:fq]).flatten,
76
+ :fl => options[:fields],
77
+ :start => start = (options[:page] -1) * options[:per_page],
78
+ :rows => options[:per_page],
79
+ :sort => options[:sort]
80
+ }
81
+
82
+ if options[:facet]
83
+ query["facet"] = true
84
+ query["facet.field"] = options[:facet][:fields]
85
+ query["facet.query"] = options[:facet][:queries]
86
+ query["facet.mincount"] = options[:facet][:mincount] || 1
87
+ query["facet.limit"] = options[:facet][:limit]
88
+
89
+ query["facet.missing"] = @params[:facet][:missing]
90
+ query["facet.mincount"] = @params[:facet][:mincount]
91
+ query["facet.prefix"] = @params[:facet][:prefix]
92
+ query["facet.offset"] = @params[:facet][:offset]
93
+ query["facet.offset"] = 'count'
94
+ end
95
+
96
+ if options[:mlt]
97
+ query['mlt'] = true
98
+ query['mlt.fl'] = Array(options[:mlt][:fields]).flatten.join(',')
99
+ end
100
+
101
+ if options[:types]
102
+ query[:fq] << Array(options[:types]).map {|type| "type:#{type}"}.join(" OR ")
103
+ end
104
+
105
+ Flare.log(<<-SOLR.squish)
106
+ \e[4;32mSolr Query:\e[0;1m
107
+ #{query[:q].join(', ')}
108
+ #{"(#{query[:fq].join(' AND ')})," if query[:fq] }
109
+ sort: #{query[:sort]}
110
+ start: #{query[:start]},
111
+ rows: #{query[:rows]}
112
+ SOLR
113
+
114
+ response = connection.select(query)
115
+ response[:request] = query
116
+ response[:request][:page] = options[:page]
117
+ response[:request][:per_page] = options[:per_page]
118
+
119
+ response.with_indifferent_access
120
+ end
121
+
122
+ def ensure_searchable(*objects)
123
+ Array(objects).flatten.select { |object| object.class.searchable? }
124
+ end
125
+
126
+ def prepare_query(query)
127
+ query[:page] ||= query[:page] ? query[:page].to_i : 1
128
+ query[:per_page] ||= PER_PAGE
129
+ query[:limit] ||= RESULT_LIMIT
130
+ query[:fields] ||= '* score'
131
+ query
132
+ end
133
+
134
+ # I dont like this... Can we move it to hash if a library like ActiveSupport doesn't already have it?
135
+ def symbolize_keys(hash)
136
+ hash.inject({}){|result, (key, value)|
137
+ new_key = case key
138
+ when String then key.to_sym
139
+ else key
140
+ end
141
+ new_value = case value
142
+ when Hash then symbolize_keys(value)
143
+ else value
144
+ end
145
+ result[new_key] = new_value
146
+ result
147
+ }
148
+ end
149
+ end
150
+ end
@@ -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