application_insights 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +40 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +106 -0
  6. data/Rakefile +10 -0
  7. data/application_insights.gemspec +25 -0
  8. data/lib/application_insights.rb +2 -0
  9. data/lib/application_insights/channel/contracts/application.rb +35 -0
  10. data/lib/application_insights/channel/contracts/data.rb +47 -0
  11. data/lib/application_insights/channel/contracts/data_point.rb +125 -0
  12. data/lib/application_insights/channel/contracts/data_point_type.rb +16 -0
  13. data/lib/application_insights/channel/contracts/dependency_kind.rb +22 -0
  14. data/lib/application_insights/channel/contracts/dependency_source_type.rb +19 -0
  15. data/lib/application_insights/channel/contracts/device.rb +243 -0
  16. data/lib/application_insights/channel/contracts/envelope.rb +254 -0
  17. data/lib/application_insights/channel/contracts/event_data.rb +77 -0
  18. data/lib/application_insights/channel/contracts/exception_data.rb +105 -0
  19. data/lib/application_insights/channel/contracts/exception_details.rb +125 -0
  20. data/lib/application_insights/channel/contracts/internal.rb +51 -0
  21. data/lib/application_insights/channel/contracts/json_serializable.rb +59 -0
  22. data/lib/application_insights/channel/contracts/location.rb +35 -0
  23. data/lib/application_insights/channel/contracts/message_data.rb +76 -0
  24. data/lib/application_insights/channel/contracts/metric_data.rb +60 -0
  25. data/lib/application_insights/channel/contracts/operation.rb +83 -0
  26. data/lib/application_insights/channel/contracts/page_view_data.rb +109 -0
  27. data/lib/application_insights/channel/contracts/remote_dependency_data.rb +218 -0
  28. data/lib/application_insights/channel/contracts/request_data.rb +173 -0
  29. data/lib/application_insights/channel/contracts/session.rb +67 -0
  30. data/lib/application_insights/channel/contracts/severity_level.rb +25 -0
  31. data/lib/application_insights/channel/contracts/stack_frame.rb +91 -0
  32. data/lib/application_insights/channel/contracts/user.rb +83 -0
  33. data/lib/application_insights/channel/queue_base.rb +48 -0
  34. data/lib/application_insights/channel/sender_base.rb +46 -0
  35. data/lib/application_insights/channel/synchronous_queue.rb +28 -0
  36. data/lib/application_insights/channel/synchronous_sender.rb +13 -0
  37. data/lib/application_insights/channel/telemetry_channel.rb +81 -0
  38. data/lib/application_insights/channel/telemetry_context.rb +49 -0
  39. data/lib/application_insights/telemetry_client.rb +111 -0
  40. data/lib/application_insights/version.rb +3 -0
  41. data/test/application_insights.rb +9 -0
  42. data/test/application_insights/channel/contracts/test_application.rb +31 -0
  43. data/test/application_insights/channel/contracts/test_data.rb +44 -0
  44. data/test/application_insights/channel/contracts/test_data_point.rb +109 -0
  45. data/test/application_insights/channel/contracts/test_device.rb +200 -0
  46. data/test/application_insights/channel/contracts/test_envelope.rb +209 -0
  47. data/test/application_insights/channel/contracts/test_event_data.rb +62 -0
  48. data/test/application_insights/channel/contracts/test_exception_data.rb +85 -0
  49. data/test/application_insights/channel/contracts/test_exception_details.rb +106 -0
  50. data/test/application_insights/channel/contracts/test_internal.rb +44 -0
  51. data/test/application_insights/channel/contracts/test_location.rb +31 -0
  52. data/test/application_insights/channel/contracts/test_message_data.rb +66 -0
  53. data/test/application_insights/channel/contracts/test_metric_data.rb +50 -0
  54. data/test/application_insights/channel/contracts/test_operation.rb +70 -0
  55. data/test/application_insights/channel/contracts/test_page_view_data.rb +88 -0
  56. data/test/application_insights/channel/contracts/test_remote_dependency_data.rb +183 -0
  57. data/test/application_insights/channel/contracts/test_request_data.rb +153 -0
  58. data/test/application_insights/channel/contracts/test_session.rb +57 -0
  59. data/test/application_insights/channel/contracts/test_stack_frame.rb +83 -0
  60. data/test/application_insights/channel/contracts/test_user.rb +70 -0
  61. data/test/application_insights/channel/test_queue_base.rb +88 -0
  62. data/test/application_insights/channel/test_sender_base.rb +96 -0
  63. data/test/application_insights/channel/test_synchronous_queue.rb +42 -0
  64. data/test/application_insights/channel/test_synchronous_sender.rb +11 -0
  65. data/test/application_insights/channel/test_telemetry_channel.rb +102 -0
  66. data/test/application_insights/channel/test_telemetry_context.rb +72 -0
  67. data/test/application_insights/test_telemetry_client.rb +107 -0
  68. metadata +166 -0
@@ -0,0 +1,173 @@
1
+ require_relative 'json_serializable'
2
+
3
+ module ApplicationInsights
4
+ module Channel
5
+ module Contracts
6
+ # Data contract class for type RequestData.
7
+ class RequestData < JsonSerializable
8
+ # Initializes a new instance of the RequestData class.
9
+ def initialize(options={})
10
+ defaults = {
11
+ 'ver' => 2,
12
+ 'id' => nil,
13
+ 'name' => nil,
14
+ 'startTime' => nil,
15
+ 'duration' => nil,
16
+ 'responseCode' => nil,
17
+ 'success' => nil,
18
+ 'httpMethod' => nil,
19
+ 'url' => nil,
20
+ 'properties' => {},
21
+ 'measurements' => {}
22
+ }
23
+ values = {
24
+ 'ver' => 2,
25
+ 'id' => nil,
26
+ 'startTime' => nil,
27
+ 'duration' => nil,
28
+ 'responseCode' => nil,
29
+ 'success' => nil
30
+ }
31
+ super defaults, values, options
32
+ end
33
+
34
+ # Gets the ver property.
35
+ def ver
36
+ @values['ver']
37
+ end
38
+
39
+ # Sets the ver property.
40
+ def ver=(value)
41
+ @values['ver'] = value
42
+ end
43
+
44
+ # Gets the id property.
45
+ def id
46
+ @values['id']
47
+ end
48
+
49
+ # Sets the id property.
50
+ def id=(value)
51
+ @values['id'] = value
52
+ end
53
+
54
+ # Gets the name property.
55
+ def name
56
+ return @values['name'] if @values.key?('name')
57
+ @defaults['name']
58
+ end
59
+
60
+ # Sets the name property.
61
+ def name=(value)
62
+ if value == @defaults['name']
63
+ @values.delete 'name' if @values.key? 'name'
64
+ else
65
+ @values['name'] = value
66
+ end
67
+ end
68
+
69
+ # Gets the start_time property.
70
+ def start_time
71
+ @values['startTime']
72
+ end
73
+
74
+ # Sets the start_time property.
75
+ def start_time=(value)
76
+ @values['startTime'] = value
77
+ end
78
+
79
+ # Gets the duration property.
80
+ def duration
81
+ @values['duration']
82
+ end
83
+
84
+ # Sets the duration property.
85
+ def duration=(value)
86
+ @values['duration'] = value
87
+ end
88
+
89
+ # Gets the response_code property.
90
+ def response_code
91
+ @values['responseCode']
92
+ end
93
+
94
+ # Sets the response_code property.
95
+ def response_code=(value)
96
+ @values['responseCode'] = value
97
+ end
98
+
99
+ # Gets the success property.
100
+ def success
101
+ @values['success']
102
+ end
103
+
104
+ # Sets the success property.
105
+ def success=(value)
106
+ @values['success'] = value
107
+ end
108
+
109
+ # Gets the http_method property.
110
+ def http_method
111
+ return @values['httpMethod'] if @values.key?('httpMethod')
112
+ @defaults['httpMethod']
113
+ end
114
+
115
+ # Sets the http_method property.
116
+ def http_method=(value)
117
+ if value == @defaults['httpMethod']
118
+ @values.delete 'httpMethod' if @values.key? 'httpMethod'
119
+ else
120
+ @values['httpMethod'] = value
121
+ end
122
+ end
123
+
124
+ # Gets the url property.
125
+ def url
126
+ return @values['url'] if @values.key?('url')
127
+ @defaults['url']
128
+ end
129
+
130
+ # Sets the url property.
131
+ def url=(value)
132
+ if value == @defaults['url']
133
+ @values.delete 'url' if @values.key? 'url'
134
+ else
135
+ @values['url'] = value
136
+ end
137
+ end
138
+
139
+ # Gets the properties property.
140
+ def properties
141
+ return @values['properties'] if @values.key?('properties')
142
+ @values['properties'] = {}
143
+ @values['properties']
144
+ end
145
+
146
+ # Sets the properties property.
147
+ def properties=(value)
148
+ if value == @defaults['properties']
149
+ @values.delete 'properties' if @values.key? 'properties'
150
+ else
151
+ @values['properties'] = value
152
+ end
153
+ end
154
+
155
+ # Gets the measurements property.
156
+ def measurements
157
+ return @values['measurements'] if @values.key?('measurements')
158
+ @values['measurements'] = {}
159
+ @values['measurements']
160
+ end
161
+
162
+ # Sets the measurements property.
163
+ def measurements=(value)
164
+ if value == @defaults['measurements']
165
+ @values.delete 'measurements' if @values.key? 'measurements'
166
+ else
167
+ @values['measurements'] = value
168
+ end
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,67 @@
1
+ require_relative 'json_serializable'
2
+
3
+ module ApplicationInsights
4
+ module Channel
5
+ module Contracts
6
+ # Data contract class for type Session.
7
+ class Session < JsonSerializable
8
+ # Initializes a new instance of the Session class.
9
+ def initialize(options={})
10
+ defaults = {
11
+ 'ai.session.id' => nil,
12
+ 'ai.session.isFirst' => nil,
13
+ 'ai.session.isNew' => nil
14
+ }
15
+ values = {
16
+ }
17
+ super defaults, values, options
18
+ end
19
+
20
+ # Gets the id property.
21
+ def id
22
+ return @values['ai.session.id'] if @values.key?('ai.session.id')
23
+ @defaults['ai.session.id']
24
+ end
25
+
26
+ # Sets the id property.
27
+ def id=(value)
28
+ if value == @defaults['ai.session.id']
29
+ @values.delete 'ai.session.id' if @values.key? 'ai.session.id'
30
+ else
31
+ @values['ai.session.id'] = value
32
+ end
33
+ end
34
+
35
+ # Gets the is_first property.
36
+ def is_first
37
+ return @values['ai.session.isFirst'] if @values.key?('ai.session.isFirst')
38
+ @defaults['ai.session.isFirst']
39
+ end
40
+
41
+ # Sets the is_first property.
42
+ def is_first=(value)
43
+ if value == @defaults['ai.session.isFirst']
44
+ @values.delete 'ai.session.isFirst' if @values.key? 'ai.session.isFirst'
45
+ else
46
+ @values['ai.session.isFirst'] = value
47
+ end
48
+ end
49
+
50
+ # Gets the is_new property.
51
+ def is_new
52
+ return @values['ai.session.isNew'] if @values.key?('ai.session.isNew')
53
+ @defaults['ai.session.isNew']
54
+ end
55
+
56
+ # Sets the is_new property.
57
+ def is_new=(value)
58
+ if value == @defaults['ai.session.isNew']
59
+ @values.delete 'ai.session.isNew' if @values.key? 'ai.session.isNew'
60
+ else
61
+ @values['ai.session.isNew'] = value
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'json_serializable'
2
+
3
+ module ApplicationInsights
4
+ module Channel
5
+ module Contracts
6
+ # Data contract class for type SeverityLevel.
7
+ class SeverityLevel
8
+ # Enumeration value VERBOSE.
9
+ VERBOSE = 0
10
+
11
+ # Enumeration value INFORMATION.
12
+ INFORMATION = 1
13
+
14
+ # Enumeration value WARNING.
15
+ WARNING = 2
16
+
17
+ # Enumeration value ERROR.
18
+ ERROR = 3
19
+
20
+ # Enumeration value CRITICAL.
21
+ CRITICAL = 4
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,91 @@
1
+ require_relative 'json_serializable'
2
+
3
+ module ApplicationInsights
4
+ module Channel
5
+ module Contracts
6
+ # Data contract class for type StackFrame.
7
+ class StackFrame < JsonSerializable
8
+ # Initializes a new instance of the StackFrame class.
9
+ def initialize(options={})
10
+ defaults = {
11
+ 'level' => nil,
12
+ 'method' => nil,
13
+ 'assembly' => nil,
14
+ 'fileName' => nil,
15
+ 'line' => nil
16
+ }
17
+ values = {
18
+ 'level' => nil,
19
+ 'method' => nil
20
+ }
21
+ super defaults, values, options
22
+ end
23
+
24
+ # Gets the level property.
25
+ def level
26
+ @values['level']
27
+ end
28
+
29
+ # Sets the level property.
30
+ def level=(value)
31
+ @values['level'] = value
32
+ end
33
+
34
+ # Gets the method property.
35
+ def method
36
+ @values['method']
37
+ end
38
+
39
+ # Sets the method property.
40
+ def method=(value)
41
+ @values['method'] = value
42
+ end
43
+
44
+ # Gets the assembly property.
45
+ def assembly
46
+ return @values['assembly'] if @values.key?('assembly')
47
+ @defaults['assembly']
48
+ end
49
+
50
+ # Sets the assembly property.
51
+ def assembly=(value)
52
+ if value == @defaults['assembly']
53
+ @values.delete 'assembly' if @values.key? 'assembly'
54
+ else
55
+ @values['assembly'] = value
56
+ end
57
+ end
58
+
59
+ # Gets the file_name property.
60
+ def file_name
61
+ return @values['fileName'] if @values.key?('fileName')
62
+ @defaults['fileName']
63
+ end
64
+
65
+ # Sets the file_name property.
66
+ def file_name=(value)
67
+ if value == @defaults['fileName']
68
+ @values.delete 'fileName' if @values.key? 'fileName'
69
+ else
70
+ @values['fileName'] = value
71
+ end
72
+ end
73
+
74
+ # Gets the line property.
75
+ def line
76
+ return @values['line'] if @values.key?('line')
77
+ @defaults['line']
78
+ end
79
+
80
+ # Sets the line property.
81
+ def line=(value)
82
+ if value == @defaults['line']
83
+ @values.delete 'line' if @values.key? 'line'
84
+ else
85
+ @values['line'] = value
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,83 @@
1
+ require_relative 'json_serializable'
2
+
3
+ module ApplicationInsights
4
+ module Channel
5
+ module Contracts
6
+ # Data contract class for type User.
7
+ class User < JsonSerializable
8
+ # Initializes a new instance of the User class.
9
+ def initialize(options={})
10
+ defaults = {
11
+ 'ai.user.accountAcquisitionDate' => nil,
12
+ 'ai.user.accountId' => nil,
13
+ 'ai.user.userAgent' => nil,
14
+ 'ai.user.id' => nil
15
+ }
16
+ values = {
17
+ }
18
+ super defaults, values, options
19
+ end
20
+
21
+ # Gets the account_acquisition_date property.
22
+ def account_acquisition_date
23
+ return @values['ai.user.accountAcquisitionDate'] if @values.key?('ai.user.accountAcquisitionDate')
24
+ @defaults['ai.user.accountAcquisitionDate']
25
+ end
26
+
27
+ # Sets the account_acquisition_date property.
28
+ def account_acquisition_date=(value)
29
+ if value == @defaults['ai.user.accountAcquisitionDate']
30
+ @values.delete 'ai.user.accountAcquisitionDate' if @values.key? 'ai.user.accountAcquisitionDate'
31
+ else
32
+ @values['ai.user.accountAcquisitionDate'] = value
33
+ end
34
+ end
35
+
36
+ # Gets the account_id property.
37
+ def account_id
38
+ return @values['ai.user.accountId'] if @values.key?('ai.user.accountId')
39
+ @defaults['ai.user.accountId']
40
+ end
41
+
42
+ # Sets the account_id property.
43
+ def account_id=(value)
44
+ if value == @defaults['ai.user.accountId']
45
+ @values.delete 'ai.user.accountId' if @values.key? 'ai.user.accountId'
46
+ else
47
+ @values['ai.user.accountId'] = value
48
+ end
49
+ end
50
+
51
+ # Gets the user_agent property.
52
+ def user_agent
53
+ return @values['ai.user.userAgent'] if @values.key?('ai.user.userAgent')
54
+ @defaults['ai.user.userAgent']
55
+ end
56
+
57
+ # Sets the user_agent property.
58
+ def user_agent=(value)
59
+ if value == @defaults['ai.user.userAgent']
60
+ @values.delete 'ai.user.userAgent' if @values.key? 'ai.user.userAgent'
61
+ else
62
+ @values['ai.user.userAgent'] = value
63
+ end
64
+ end
65
+
66
+ # Gets the id property.
67
+ def id
68
+ return @values['ai.user.id'] if @values.key?('ai.user.id')
69
+ @defaults['ai.user.id']
70
+ end
71
+
72
+ # Sets the id property.
73
+ def id=(value)
74
+ if value == @defaults['ai.user.id']
75
+ @values.delete 'ai.user.id' if @values.key? 'ai.user.id'
76
+ else
77
+ @values['ai.user.id'] = value
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,48 @@
1
+ require 'thread'
2
+
3
+ module ApplicationInsights
4
+ module Channel
5
+ # The base class for all queues.
6
+ class QueueBase
7
+ # Initializes a new instance of the queue class.
8
+ def initialize(sender)
9
+ raise ArgumentError, 'Sender was required but not provided' unless sender
10
+ @queue = Queue.new
11
+ @max_queue_length = 500
12
+ @sender = sender
13
+ @sender.queue = self
14
+ end
15
+
16
+ # Gets or sets the maximum number of items that will be held by the queue before we force a send.
17
+ attr_accessor :max_queue_length
18
+
19
+ # Gets the sender associated with this queue
20
+ attr_reader :sender
21
+
22
+ # Adds a single item to the queue.
23
+ def push(item)
24
+ unless item
25
+ return
26
+ end
27
+
28
+ @queue.push(item)
29
+ if @queue.length >= @max_queue_length
30
+ flush()
31
+ end
32
+ end
33
+
34
+ # Gets a single item from the queue. If no item is available, return nil.
35
+ def pop
36
+ begin
37
+ return @queue.pop(TRUE)
38
+ rescue ThreadError => _
39
+ return nil
40
+ end
41
+ end
42
+
43
+ # Flushes the current queue to the passed in sender.
44
+ def flush
45
+ end
46
+ end
47
+ end
48
+ end