rocket_tracker 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 81d7a04090e8477b9a3b2937831227116e6a4790
4
+ data.tar.gz: 03e49c88137f8d7e93d305c114fc330e8f273a21
5
+ SHA512:
6
+ metadata.gz: 08c076b9f30afdd91fa7847724077e23700f1551347198eecb9e7c5d4297aea1910f7c14616583bcbdf347ae74ad452854ad0a08f9bd787a203a1804240ae37a
7
+ data.tar.gz: 4d6b79799ed73ca10a13bb95119bd933610b90c5a5c45ed1b536f1cfcd475a7632bdb02ce20854e7e7b04ac0b44b4ea54b021f8d11f83b39f80601f761c7d956
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ rocket_tracker
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rocket_tracker.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 glebtv
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # RocketTracker
2
+
3
+ This gem is used with our task tracker http://rtrack.ru to monitor site status and traffic.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'rocket_tracker'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install rocket_tracker
18
+
19
+ ## Usage
20
+
21
+ Create ```config/initializers/rocket_tracker.rb``` with data given to you by rtrack:
22
+
23
+ RocketTracker.configure do |c|
24
+ c.api_key = "123"
25
+ c.js_key = "456"
26
+ end
27
+
28
+ Include api key for JS in ```layout/application.html``` if you want to monitor client-side page load speed:
29
+
30
+ == rocket_tracker_tag
31
+
32
+ This tag should be included before your application.js
33
+
34
+ Add
35
+
36
+ #= require rocket_tracker
37
+
38
+ to your ```application.js.coffee```
39
+
40
+ ## Contributing
41
+
42
+ 1. Fork it ( https://github.com/rs-pro/rocket_tracker/fork )
43
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
44
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
45
+ 4. Push to the branch (`git push origin my-new-feature`)
46
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,29 @@
1
+ console.log 'start'
2
+
3
+ if window.performance && window.performance.timing
4
+ get = (key) ->
5
+ window.performance.timing[key]
6
+
7
+ time = (start, end) ->
8
+ s = get(start)
9
+ e = get(end)
10
+ (e - s) / 1000 if s and e
11
+
12
+ $(window).load ->
13
+ console.log 'load'
14
+ t = window.performance.timing
15
+ obj =
16
+ real: time('navigationStart', 'loadEventEnd')
17
+ total: time('fetchStart', 'loadEventEnd')
18
+ network: time('fetchStart', 'responseEnd')
19
+ dns: time('domainLookupStart', 'domainLookupEnd')
20
+ domready: time('domainLookupStart', 'domainLookupEnd')
21
+
22
+ str = ""
23
+ for key of obj
24
+ console.log key, obj[key]
25
+ str += "&" unless str is ""
26
+ str += key + "=" + obj[key]
27
+
28
+ (new Image).src = "#{ROCKET_TRACKER_ENDPOINT}?#{str}"
29
+
@@ -0,0 +1,49 @@
1
+ require "rocket_tracker/version"
2
+
3
+ require 'bindata'
4
+ require 'yajl'
5
+
6
+ require "rocket_tracker/configuration"
7
+
8
+ require "rocket_tracker/engine"
9
+ require "rocket_tracker/railtie"
10
+
11
+ require "rocket_tracker/mtime"
12
+ require "rocket_tracker/page_view"
13
+ require "rocket_tracker/backend"
14
+
15
+ require "rocket_tracker/view_helpers"
16
+ require "rocket_tracker/engine"
17
+ require "rocket_tracker/railtie"
18
+
19
+ module RocketTracker
20
+ class << self
21
+ def config
22
+ @config ||= Configuration.new
23
+ end
24
+
25
+ def configure
26
+ if block_given?
27
+ yield(config)
28
+ else
29
+ raise 'RocketTracker.configure requires a block'
30
+ end
31
+ end
32
+
33
+ def subscribe!
34
+ ActiveSupport::Notifications.subscribe('render') do |name, start, finish, id, payload|
35
+ p name, start, finish, id
36
+ end
37
+ end
38
+
39
+ def backend
40
+ if config.api_key.blank?
41
+ puts "[WARN] RocketTracker is not configured, please set api key"
42
+ nil
43
+ else
44
+ @backend ||= Backend.new(config)
45
+ end
46
+ end
47
+ end
48
+ end
49
+
@@ -0,0 +1,19 @@
1
+ require 'resolv'
2
+
3
+ module RocketTracker
4
+ class Backend
5
+ def initialize(config)
6
+ @socket = UDPSocket.new
7
+ @ip = config.host_ip.blank? ? Resolv.getaddress(config.host) : config.host_ip
8
+ @port = config.port
9
+ end
10
+
11
+ def send(payload)
12
+ @socket.send(payload, 0, @host, @port)
13
+ end
14
+
15
+ def send_pageview(ip, url, controller, action, user_agent, start, finish)
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,30 @@
1
+ module RocketTracker
2
+ class Configuration
3
+ attr_accessor :api_key
4
+ attr_accessor :js_key
5
+ attr_accessor :host
6
+ attr_accessor :ip
7
+ attr_accessor :proto
8
+ attr_accessor :port
9
+ attr_accessor :envs
10
+ attr_accessor :project
11
+
12
+ def initialize
13
+ @host = "rtrack.ru"
14
+ @proto = "http"
15
+ @port = 80
16
+ @envs = %w(development production)
17
+ end
18
+
19
+ attr_writer :js_endpoint
20
+ def js_endpoint
21
+ @js_endpoint ||= get_endpoint
22
+ end
23
+
24
+ private
25
+ def get_endpoint
26
+ "#{RocketTracker.config.proto}://#{RocketTracker.config.host}/pageload/#{RocketTracker.config.project}/#{RocketTracker.config.js_key}"
27
+ end
28
+ end
29
+ end
30
+
@@ -0,0 +1,9 @@
1
+ module RocketTracker
2
+ class Engine < ::Rails::Engine
3
+ initializer 'RocketTracker precompile hook', group: :all do |app|
4
+ app.config.assets.precompile += %w[
5
+ rocket_tracker.js
6
+ ]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ class Mtime < BinData::Primitive
2
+ uint64be :time
3
+
4
+ def set(val)
5
+ self.time = val.to_i
6
+ end
7
+
8
+ def get
9
+ Time.at(time)
10
+ end
11
+ end
12
+
@@ -0,0 +1,18 @@
1
+ require 'digest/sha2'
2
+
3
+ module RocketTracker
4
+ class PageView < BinData::Record
5
+ endian :big
6
+ uint8 :protocol
7
+ uint32 :len, value: lambda { payload.length }
8
+ string :payload, read_length: :len
9
+ string :sha, length: 32
10
+ mtime :timestamp
11
+
12
+ def data=(value)
13
+ self.payload = Yajl.dump(value)
14
+ self.sha = Digest::SHA256.digest(payload + RocketTracker.config.api_key)
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,13 @@
1
+ require 'rocket_tracker/view_helpers'
2
+ module RocketTracker
3
+ class Railtie < Rails::Railtie
4
+ initializer "rocket_Tracker.view_helpers" do
5
+ ActionView::Base.send :include, ViewHelpers
6
+ end
7
+
8
+ initializer "rocket_tracker.subscribe" do
9
+ RocketTracker.subscribe!
10
+ end
11
+ end
12
+ end
13
+
@@ -0,0 +1,3 @@
1
+ module RocketTracker
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,11 @@
1
+ module RocketTracker
2
+ module ViewHelpers
3
+ def rocket_tracker_tag
4
+ <<-JS.html_safe
5
+ <script>
6
+ var ROCKET_TRACKER_ENDPOINT = "#{RocketTracker.config.js_endpoint}";
7
+ </script>
8
+ JS
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rocket_tracker/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rocket_tracker"
8
+ spec.version = RocketTracker::VERSION
9
+ spec.authors = ["glebtv"]
10
+ spec.email = ["glebtv@gmail.com"]
11
+ spec.summary = %q{Support gem for RocketTracker}
12
+ spec.description = %q{http://rtrack.ru}
13
+ spec.homepage = "https://github.com/rs-pro/rocket_tracker"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "bindata", '~> 2.1.0'
22
+ spec.add_dependency "yajl-ruby"
23
+ spec.add_dependency "rails"
24
+ spec.add_dependency "jquery-rails"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.6"
27
+ spec.add_development_dependency "rake"
28
+ end
29
+
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rocket_tracker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - glebtv
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bindata
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: yajl-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: jquery-rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.6'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.6'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: http://rtrack.ru
98
+ email:
99
+ - glebtv@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".ruby-gemset"
106
+ - ".ruby-version"
107
+ - Gemfile
108
+ - LICENSE.txt
109
+ - README.md
110
+ - Rakefile
111
+ - app/assets/javascripts/rocket_tracker.js.coffee
112
+ - lib/rocket_tracker.rb
113
+ - lib/rocket_tracker/backend.rb
114
+ - lib/rocket_tracker/configuration.rb
115
+ - lib/rocket_tracker/engine.rb
116
+ - lib/rocket_tracker/mtime.rb
117
+ - lib/rocket_tracker/page_view.rb
118
+ - lib/rocket_tracker/railtie.rb
119
+ - lib/rocket_tracker/version.rb
120
+ - lib/rocket_tracker/view_helpers.rb
121
+ - rocket_tracker.gemspec
122
+ homepage: https://github.com/rs-pro/rocket_tracker
123
+ licenses:
124
+ - MIT
125
+ metadata: {}
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubyforge_project:
142
+ rubygems_version: 2.2.2
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: Support gem for RocketTracker
146
+ test_files: []