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.

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 +102 -0
  9. data/lib/flare/collection.rb +47 -0
  10. data/lib/flare/configuration.rb +64 -123
  11. data/lib/flare/index_builder.rb +24 -0
  12. data/lib/flare/session.rb +142 -0
  13. data/lib/flare/tasks.rb +18 -0
  14. data/lib/flare.rb +19 -537
  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 -39
  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 -279
  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,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
@@ -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