octocore-mongo 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGES.md +12 -0
- data/CONTRIBUTING +0 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +150 -0
- data/LICENSE +202 -0
- data/MAINTAINERS +0 -0
- data/NOTICE +8 -0
- data/README.md +69 -0
- data/Rakefile +51 -0
- data/bin/fakestream-mongo +258 -0
- data/bin/octocore-admin-mongo +54 -0
- data/lib/octocore-mongo.rb +157 -0
- data/lib/octocore-mongo/baseline.rb +131 -0
- data/lib/octocore-mongo/callbacks.rb +117 -0
- data/lib/octocore-mongo/config.rb +39 -0
- data/lib/octocore-mongo/config/config.yml +1 -0
- data/lib/octocore-mongo/config/search/index/user.yml +42 -0
- data/lib/octocore-mongo/counter.rb +265 -0
- data/lib/octocore-mongo/counter/helpers.rb +168 -0
- data/lib/octocore-mongo/email.rb +63 -0
- data/lib/octocore-mongo/featureflag.rb +79 -0
- data/lib/octocore-mongo/helpers.rb +6 -0
- data/lib/octocore-mongo/helpers/api_consumer_helper.rb +51 -0
- data/lib/octocore-mongo/helpers/api_helper.rb +65 -0
- data/lib/octocore-mongo/helpers/api_logger.rb +14 -0
- data/lib/octocore-mongo/helpers/client_helper.rb +104 -0
- data/lib/octocore-mongo/helpers/kong_helper.rb +164 -0
- data/lib/octocore-mongo/helpers/sinatra_helper.rb +22 -0
- data/lib/octocore-mongo/kafka_bridge.rb +60 -0
- data/lib/octocore-mongo/kldivergence.rb +14 -0
- data/lib/octocore-mongo/mailer.rb +1 -0
- data/lib/octocore-mongo/mailer/subscriber_mailer.rb +32 -0
- data/lib/octocore-mongo/message_parser.rb +114 -0
- data/lib/octocore-mongo/models.rb +275 -0
- data/lib/octocore-mongo/models/contactus.rb +42 -0
- data/lib/octocore-mongo/models/enterprise.rb +75 -0
- data/lib/octocore-mongo/models/enterprise/adapter_details.rb +18 -0
- data/lib/octocore-mongo/models/enterprise/api_event.rb +14 -0
- data/lib/octocore-mongo/models/enterprise/api_hit.rb +20 -0
- data/lib/octocore-mongo/models/enterprise/api_key.rb +11 -0
- data/lib/octocore-mongo/models/enterprise/api_track.rb +13 -0
- data/lib/octocore-mongo/models/enterprise/app_init.rb +13 -0
- data/lib/octocore-mongo/models/enterprise/app_login.rb +12 -0
- data/lib/octocore-mongo/models/enterprise/app_logout.rb +12 -0
- data/lib/octocore-mongo/models/enterprise/authorization.rb +67 -0
- data/lib/octocore-mongo/models/enterprise/category.rb +14 -0
- data/lib/octocore-mongo/models/enterprise/category_baseline.rb +19 -0
- data/lib/octocore-mongo/models/enterprise/category_hit.rb +26 -0
- data/lib/octocore-mongo/models/enterprise/category_trend.rb +19 -0
- data/lib/octocore-mongo/models/enterprise/conversions.rb +69 -0
- data/lib/octocore-mongo/models/enterprise/ctr.rb +54 -0
- data/lib/octocore-mongo/models/enterprise/dimension_choice.rb +21 -0
- data/lib/octocore-mongo/models/enterprise/engagement_time.rb +43 -0
- data/lib/octocore-mongo/models/enterprise/funnel_data.rb +20 -0
- data/lib/octocore-mongo/models/enterprise/funnel_tracker.rb +19 -0
- data/lib/octocore-mongo/models/enterprise/funnels.rb +129 -0
- data/lib/octocore-mongo/models/enterprise/gcm.rb +21 -0
- data/lib/octocore-mongo/models/enterprise/newsfeed_hit.rb +52 -0
- data/lib/octocore-mongo/models/enterprise/notification_hit.rb +42 -0
- data/lib/octocore-mongo/models/enterprise/page.rb +15 -0
- data/lib/octocore-mongo/models/enterprise/page_view.rb +14 -0
- data/lib/octocore-mongo/models/enterprise/pageload_time.rb +43 -0
- data/lib/octocore-mongo/models/enterprise/product.rb +22 -0
- data/lib/octocore-mongo/models/enterprise/product_baseline.rb +20 -0
- data/lib/octocore-mongo/models/enterprise/product_hit.rb +26 -0
- data/lib/octocore-mongo/models/enterprise/product_page_view.rb +13 -0
- data/lib/octocore-mongo/models/enterprise/product_trend.rb +18 -0
- data/lib/octocore-mongo/models/enterprise/push_key.rb +15 -0
- data/lib/octocore-mongo/models/enterprise/rules.rb +45 -0
- data/lib/octocore-mongo/models/enterprise/segment.rb +65 -0
- data/lib/octocore-mongo/models/enterprise/segment_data.rb +22 -0
- data/lib/octocore-mongo/models/enterprise/tag.rb +14 -0
- data/lib/octocore-mongo/models/enterprise/tag_baseline.rb +19 -0
- data/lib/octocore-mongo/models/enterprise/tag_hit.rb +26 -0
- data/lib/octocore-mongo/models/enterprise/tag_trend.rb +19 -0
- data/lib/octocore-mongo/models/enterprise/template.rb +18 -0
- data/lib/octocore-mongo/models/plans.rb +17 -0
- data/lib/octocore-mongo/models/subscribe.rb +13 -0
- data/lib/octocore-mongo/models/user.rb +13 -0
- data/lib/octocore-mongo/models/user/push_token.rb +15 -0
- data/lib/octocore-mongo/models/user/user_browser_details.rb +16 -0
- data/lib/octocore-mongo/models/user/user_location_history.rb +15 -0
- data/lib/octocore-mongo/models/user/user_persona.rb +101 -0
- data/lib/octocore-mongo/models/user/user_phone_details.rb +17 -0
- data/lib/octocore-mongo/models/user/user_profile.rb +20 -0
- data/lib/octocore-mongo/models/user/user_timeline.rb +111 -0
- data/lib/octocore-mongo/record.rb +20 -0
- data/lib/octocore-mongo/schedeuleable.rb +20 -0
- data/lib/octocore-mongo/scheduler.rb +72 -0
- data/lib/octocore-mongo/search.rb +5 -0
- data/lib/octocore-mongo/search/client.rb +33 -0
- data/lib/octocore-mongo/search/indexer.rb +0 -0
- data/lib/octocore-mongo/search/searchable.rb +18 -0
- data/lib/octocore-mongo/search/setup.rb +71 -0
- data/lib/octocore-mongo/segment.rb +287 -0
- data/lib/octocore-mongo/stats.rb +33 -0
- data/lib/octocore-mongo/trendable.rb +88 -0
- data/lib/octocore-mongo/trends.rb +158 -0
- data/lib/octocore-mongo/utils.rb +90 -0
- data/lib/octocore-mongo/version.rb +4 -0
- data/octocore-mongo.gemspec +50 -0
- data/spec/lib/stats_spec.rb +20 -0
- data/spec/spec_helper.rb +103 -0
- metadata +545 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
require 'securerandom'
|
3
|
+
require 'octocore-mongo/helpers/kong_helper'
|
4
|
+
|
5
|
+
module Octo
|
6
|
+
class Authorization
|
7
|
+
include MongoMapper::Document
|
8
|
+
include Octo::Helpers::KongHelper
|
9
|
+
|
10
|
+
key :username, String
|
11
|
+
|
12
|
+
key :enterprise_id, String
|
13
|
+
key :email, String
|
14
|
+
key :apikey, String
|
15
|
+
key :session_token, String
|
16
|
+
key :custom_id, String
|
17
|
+
key :password, String
|
18
|
+
key :admin, Boolean
|
19
|
+
|
20
|
+
before_create :check_api_key, :generate_password
|
21
|
+
after_create :kong_requests
|
22
|
+
|
23
|
+
after_destroy :kong_delete
|
24
|
+
|
25
|
+
timestamps!
|
26
|
+
|
27
|
+
# Check or Generate client apikey
|
28
|
+
def check_api_key
|
29
|
+
if(self.apikey.nil?)
|
30
|
+
self.apikey = SecureRandom.hex
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Check or Generate client password
|
35
|
+
def generate_password
|
36
|
+
if(self.password.nil?)
|
37
|
+
self.password = Digest::SHA1.hexdigest(self.username + self.enterprise_id)
|
38
|
+
else
|
39
|
+
self.password = Digest::SHA1.hexdigest(self.password + self.enterprise_id)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Perform Kong Operations after creating client
|
44
|
+
def kong_requests
|
45
|
+
kong_config = Octo.get_config :kong
|
46
|
+
if kong_config[:enabled]
|
47
|
+
url = '/consumers/'
|
48
|
+
payload = {
|
49
|
+
username: self.username,
|
50
|
+
custom_id: self.enterprise_id
|
51
|
+
}
|
52
|
+
|
53
|
+
process_kong_request(url, :PUT, payload)
|
54
|
+
create_keyauth( self.username, self.apikey)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Delete Kong Records
|
59
|
+
def kong_delete
|
60
|
+
kong_config = Octo.get_config :kong
|
61
|
+
if kong_config[:enabled]
|
62
|
+
delete_consumer(self.username)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
require 'octocore-mongo/record'
|
3
|
+
|
4
|
+
module Octo
|
5
|
+
class Category
|
6
|
+
include MongoMapper::Document
|
7
|
+
include Octo::Record
|
8
|
+
|
9
|
+
belongs_to :enterprise, class_name: 'Octo::Enterprise'
|
10
|
+
|
11
|
+
key :cat_text, String
|
12
|
+
timestamps!
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
|
3
|
+
require 'octocore-mongo/baseline'
|
4
|
+
require 'octocore-mongo/schedeuleable'
|
5
|
+
|
6
|
+
module Octo
|
7
|
+
class CategoryBaseline
|
8
|
+
include MongoMapper::Document
|
9
|
+
extend Octo::Baseline
|
10
|
+
extend Octo::Scheduleable
|
11
|
+
|
12
|
+
belongs_to :enterprise, class_name: 'Octo::Enterprise'
|
13
|
+
|
14
|
+
baselineable
|
15
|
+
# Specify the type of counter
|
16
|
+
baseline_for 'Octo::CategoryHit'
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
|
3
|
+
require 'octocore-mongo/counter'
|
4
|
+
require 'octocore-mongo/trendable'
|
5
|
+
require 'octocore-mongo/schedeuleable'
|
6
|
+
|
7
|
+
module Octo
|
8
|
+
|
9
|
+
class CategoryHit
|
10
|
+
include MongoMapper::Document
|
11
|
+
extend Octo::Counter
|
12
|
+
extend Octo::Trendable
|
13
|
+
extend Octo::Scheduleable
|
14
|
+
|
15
|
+
COUNTERS = 20
|
16
|
+
|
17
|
+
belongs_to :enterprise, class_name: 'Octo::Enterprise'
|
18
|
+
|
19
|
+
countables
|
20
|
+
trendables
|
21
|
+
|
22
|
+
baseline 'Octo::CategoryBaseline'
|
23
|
+
trends_class 'Octo::CategoryTrend'
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
require 'octocore-mongo/trends'
|
3
|
+
|
4
|
+
module Octo
|
5
|
+
|
6
|
+
# Class for storing trending category
|
7
|
+
class CategoryTrend
|
8
|
+
include MongoMapper::Document
|
9
|
+
extend Octo::Trends
|
10
|
+
|
11
|
+
belongs_to :enterprise, class_name: 'Octo::Enterprise'
|
12
|
+
|
13
|
+
trendable
|
14
|
+
|
15
|
+
trend_for 'Octo::CategoryHit'
|
16
|
+
trend_class 'Octo::Category'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
require 'octocore-mongo/record'
|
3
|
+
|
4
|
+
module Octo
|
5
|
+
|
6
|
+
# The conversions store
|
7
|
+
class Conversions
|
8
|
+
|
9
|
+
include MongoMapper::Document
|
10
|
+
include Octo::Record
|
11
|
+
|
12
|
+
# Types of conversions
|
13
|
+
NEWSFEED = 0
|
14
|
+
PUSH_NOTIFICATION = 1
|
15
|
+
EMAIL = 2
|
16
|
+
|
17
|
+
belongs_to :enterprise, class_name: 'Octo::Enterprise'
|
18
|
+
|
19
|
+
key :type, Integer
|
20
|
+
key :ts, Time
|
21
|
+
|
22
|
+
key :value, Float
|
23
|
+
|
24
|
+
class << self
|
25
|
+
|
26
|
+
# Fetches the types of conversions possible
|
27
|
+
# @return [Hash] The conversion name and its value hash
|
28
|
+
def types
|
29
|
+
{
|
30
|
+
'Newsfeed' => Octo::Conversions::NEWSFEED,
|
31
|
+
'Notification' => Octo::Conversions::PUSH_NOTIFICATION,
|
32
|
+
# 'Email' => Octo::Conversions::EMAIL
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def data( enterprise_id, type, ts = 3.days.ago..Time.now.floor)
|
37
|
+
args = {
|
38
|
+
enterprise_id: enterprise_id,
|
39
|
+
type: type,
|
40
|
+
ts: ts
|
41
|
+
}
|
42
|
+
res = self.where(args)
|
43
|
+
if res.count > 0
|
44
|
+
res.first
|
45
|
+
else
|
46
|
+
res = []
|
47
|
+
e = Octo::Enterprise.find_by_id(enterprise_id)
|
48
|
+
if e.fakedata?
|
49
|
+
if ts.class == Range
|
50
|
+
ts_begin = ts.begin.floor
|
51
|
+
ts_end = ts.end.floor
|
52
|
+
ts_begin.to(ts_end, 1.day).each do |_ts|
|
53
|
+
_args = args.merge( ts: _ts, value: rand(10.0..67.0))
|
54
|
+
res << self.new(_args).save!
|
55
|
+
end
|
56
|
+
elsif ts.class == Time
|
57
|
+
args.merge!({ value: rand(10.0..67.0) })
|
58
|
+
res << self.new(args).save!
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
res
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
require 'octocore-mongo/record'
|
3
|
+
|
4
|
+
module Octo
|
5
|
+
|
6
|
+
class Ctr
|
7
|
+
|
8
|
+
include MongoMapper::Document
|
9
|
+
include Octo::Record
|
10
|
+
|
11
|
+
# Type of Ctr. Reserved for future use
|
12
|
+
NEWSFEED = 0
|
13
|
+
|
14
|
+
belongs_to :enterprise, class_name: 'Octo::Enterprise'
|
15
|
+
|
16
|
+
key :ts, Time
|
17
|
+
|
18
|
+
key :value, Array
|
19
|
+
|
20
|
+
class << self
|
21
|
+
|
22
|
+
def data( enterprise_id, ts = Time.now.floor)
|
23
|
+
args = {
|
24
|
+
enterprise_id: enterprise_id,
|
25
|
+
ts: ts
|
26
|
+
}
|
27
|
+
res = self.where(args)
|
28
|
+
if res.count > 0
|
29
|
+
res.first
|
30
|
+
else
|
31
|
+
args.merge!({ value: value_array(15)})
|
32
|
+
self.new(args).save!
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def value_array(count)
|
37
|
+
arr = []
|
38
|
+
res = []
|
39
|
+
sum = 0
|
40
|
+
count.times do |x|
|
41
|
+
temp = rand(10.00..100.00)
|
42
|
+
arr.push(temp)
|
43
|
+
sum = sum + temp
|
44
|
+
end
|
45
|
+
count.times do |x|
|
46
|
+
res.push((arr[x]/sum)*100)
|
47
|
+
end
|
48
|
+
res
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
require 'octocore-mongo/record'
|
3
|
+
|
4
|
+
module Octo
|
5
|
+
|
6
|
+
# Choices for dimensions
|
7
|
+
class DimensionChoice
|
8
|
+
|
9
|
+
include MongoMapper::Document
|
10
|
+
include Octo::Record
|
11
|
+
|
12
|
+
belongs_to :enterprise, class_name: 'Octo::Enterprise'
|
13
|
+
|
14
|
+
key :dimension, Integer
|
15
|
+
key :choice, String
|
16
|
+
|
17
|
+
timestamps!
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
|
3
|
+
module Octo
|
4
|
+
|
5
|
+
class EngagementTime
|
6
|
+
include MongoMapper::Document
|
7
|
+
|
8
|
+
# Types of Engagement
|
9
|
+
NEWSFEED = 0
|
10
|
+
|
11
|
+
belongs_to :enterprise, class_name: 'Octo::Enterprise'
|
12
|
+
key :engagement_type, Integer
|
13
|
+
key :counter_type, Integer
|
14
|
+
key :ts, Time
|
15
|
+
|
16
|
+
key :time, Integer
|
17
|
+
|
18
|
+
timestamps!
|
19
|
+
|
20
|
+
def self.fakedata(args)
|
21
|
+
res = self.where(args)
|
22
|
+
enterprise = Octo::Enterprise.find_by_id(args[:enterprise_id])
|
23
|
+
if res.count == 0 and enterprise.fakedata?
|
24
|
+
res = []
|
25
|
+
ts = args.fetch(ts, 7.days.ago..Time.now.floor)
|
26
|
+
if ts.class == Range
|
27
|
+
start_time = ts.begin.beginning_of_day
|
28
|
+
end_time = ts.end.end_of_day
|
29
|
+
start_time.to(end_time, 1.day).each do |_ts|
|
30
|
+
_args = args.merge({ ts: _ts, time: (rand(5.0..7.0)*60).to_i })
|
31
|
+
res << self.new(_args).save!
|
32
|
+
end
|
33
|
+
elsif ts.class == Time
|
34
|
+
_args = args.merge({ time: (rand(5.0..7.0)).to_i })
|
35
|
+
res << self.new(args).save!
|
36
|
+
end
|
37
|
+
end
|
38
|
+
res
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
require 'octocore-mongo/record'
|
3
|
+
|
4
|
+
module Octo
|
5
|
+
|
6
|
+
# Stores the data for funnels
|
7
|
+
class FunnelData
|
8
|
+
include MongoMapper::Document
|
9
|
+
include Octo::Record
|
10
|
+
|
11
|
+
belongs_to :enterprise, class_name: 'Octo::Enterprise'
|
12
|
+
|
13
|
+
key :funnel_slug, String
|
14
|
+
|
15
|
+
key :ts, Time
|
16
|
+
key :value, Array
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'mongo_mapper'
|
2
|
+
|
3
|
+
module Octo
|
4
|
+
# A model for tracking the user web flow
|
5
|
+
# Used to build a markov model on the basis
|
6
|
+
# of the activity. eg p1 --> p2 will be entered
|
7
|
+
# with weight 1, and increased by +1 every time any
|
8
|
+
# user goes from p1 to p2
|
9
|
+
class FunnelTracker
|
10
|
+
include MongoMapper::Document
|
11
|
+
|
12
|
+
key :enterprise_id, ObjectId
|
13
|
+
|
14
|
+
key :p1, String
|
15
|
+
key :direction, Integer
|
16
|
+
key :p2, String
|
17
|
+
key :weight, Integer
|
18
|
+
end
|
19
|
+
end
|