giraffi 0.1.3

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.
Files changed (81) hide show
  1. data/.document +5 -0
  2. data/.yardopts +7 -0
  3. data/Gemfile +10 -0
  4. data/HISTORY.md +6 -0
  5. data/LICENSE.md +20 -0
  6. data/README.md +114 -0
  7. data/Rakefile +53 -0
  8. data/VERSION +1 -0
  9. data/examples/setup_http_monitoring.rb +88 -0
  10. data/giraffi.gemspec +155 -0
  11. data/lib/giraffi/client/applogs.rb +25 -0
  12. data/lib/giraffi/client/axions.rb +96 -0
  13. data/lib/giraffi/client/items.rb +102 -0
  14. data/lib/giraffi/client/logs.rb +23 -0
  15. data/lib/giraffi/client/media.rb +67 -0
  16. data/lib/giraffi/client/monitoringdata.rb +25 -0
  17. data/lib/giraffi/client/my_current_status.rb +19 -0
  18. data/lib/giraffi/client/regions.rb +15 -0
  19. data/lib/giraffi/client/services.rb +97 -0
  20. data/lib/giraffi/client/trends.rb +25 -0
  21. data/lib/giraffi/client/triggers.rb +94 -0
  22. data/lib/giraffi/client.rb +73 -0
  23. data/lib/giraffi/config.rb +60 -0
  24. data/lib/giraffi/version.rb +3 -0
  25. data/lib/giraffi.rb +26 -0
  26. data/test/applogs_test.rb +55 -0
  27. data/test/axions_test.rb +149 -0
  28. data/test/client_test.rb +52 -0
  29. data/test/fixtures/add_applogs_success_response.json +3 -0
  30. data/test/fixtures/add_monitroingdata.json +1 -0
  31. data/test/fixtures/add_service_to_item.json +12 -0
  32. data/test/fixtures/add_trigger_to_service.json +1 -0
  33. data/test/fixtures/create_axion.json +1 -0
  34. data/test/fixtures/create_item.json +15 -0
  35. data/test/fixtures/create_medium.json +1 -0
  36. data/test/fixtures/find_applogs_with_no_param.json +11 -0
  37. data/test/fixtures/find_applogs_with_params.json +2 -0
  38. data/test/fixtures/find_average_trends.json +6 -0
  39. data/test/fixtures/find_axion_by_id.json +9 -0
  40. data/test/fixtures/find_axion_by_trigger.json +11 -0
  41. data/test/fixtures/find_axion_logs_with_no_param.json +6 -0
  42. data/test/fixtures/find_axion_logs_with_params.json +5 -0
  43. data/test/fixtures/find_axions_by_trigger_with_axionkind.json +1 -0
  44. data/test/fixtures/find_axions_by_trigger_without_axionkind.json +1 -0
  45. data/test/fixtures/find_axions_with_no_param.json +1 -0
  46. data/test/fixtures/find_axions_with_params.json +11 -0
  47. data/test/fixtures/find_failure_trends.json +1 -0
  48. data/test/fixtures/find_item_by_id.json +15 -0
  49. data/test/fixtures/find_items_with_no_param.json +77 -0
  50. data/test/fixtures/find_items_with_params.json +17 -0
  51. data/test/fixtures/find_media_by_axion.json +13 -0
  52. data/test/fixtures/find_media_with_no_param.json +22 -0
  53. data/test/fixtures/find_media_with_params.json +1 -0
  54. data/test/fixtures/find_medium_by_id.json +1 -0
  55. data/test/fixtures/find_monitoringdata_with_no_param.json +4 -0
  56. data/test/fixtures/find_monitoringdata_with_params.json +3 -0
  57. data/test/fixtures/find_region_by_service.json +1 -0
  58. data/test/fixtures/find_regions.json +1 -0
  59. data/test/fixtures/find_service_by_id.json +12 -0
  60. data/test/fixtures/find_service_by_item_with_params.json +14 -0
  61. data/test/fixtures/find_services_by_item_with_no_param.json +14 -0
  62. data/test/fixtures/find_services_with_no_param.json +38 -0
  63. data/test/fixtures/find_services_with_params.json +14 -0
  64. data/test/fixtures/find_trigger_by_id.json +12 -0
  65. data/test/fixtures/find_triggers_by_service.json +1 -0
  66. data/test/fixtures/find_triggers_with_no_param.json +34 -0
  67. data/test/fixtures/find_triggers_with_params.json +14 -0
  68. data/test/fixtures/my_current_status_about_fake_uri.json +6 -0
  69. data/test/fixtures/my_current_status_about_real_uri.json +6 -0
  70. data/test/giraffi_test.rb +14 -0
  71. data/test/items_test.rb +170 -0
  72. data/test/logs_test.rb +60 -0
  73. data/test/media_test.rb +104 -0
  74. data/test/monitoringdata_test.rb +53 -0
  75. data/test/my_current_status_test.rb +29 -0
  76. data/test/regions_test.rb +20 -0
  77. data/test/services_test.rb +166 -0
  78. data/test/test_helper.rb +40 -0
  79. data/test/trends_test.rb +35 -0
  80. data/test/triggers_test.rb +151 -0
  81. metadata +271 -0
@@ -0,0 +1,102 @@
1
+ module Giraffi
2
+ class Client
3
+ # Defines methods related to the items
4
+
5
+ module Items
6
+ # Returns the desired items
7
+ #
8
+ # @requires_apikey Yes
9
+ # @param options [Hash] The request params to retrieve the desired items
10
+ # @return [HTTParty::Response]
11
+ def find_items(options={})
12
+ self.class.get("/items.json?apikey=#{apikey}", :query => options)
13
+ end
14
+
15
+ # Returns the desired item by the numerical ID
16
+ #
17
+ # @requires_apikey Yes
18
+ # @param id [String] The numerical ID of the desired item
19
+ # @return [HTTParty::Response]
20
+ def find_item(id)
21
+ self.class.get("/items/#{id}.json?apikey=#{apikey}")
22
+ end
23
+
24
+ # Returns the desired agent related to the item
25
+ #
26
+ # @requires_apikey Yes
27
+ # @param id [String] The numerical ID of the desired item
28
+ # @return [HTTParty::Response]
29
+ def find_agent(id)
30
+ # TODO
31
+ end
32
+
33
+ # Returns all services related to the item
34
+ #
35
+ # @requires_apikey Yes
36
+ # @param id [String] The numerical ID of the item
37
+ # @param options [Hash] A set of params to retrieve services related the item
38
+ # @return [HTTParty::Response]
39
+ def find_services_by_item(id, options={})
40
+ self.class.get("/items/#{id}/services.json?apikey=#{apikey}", :query => options)
41
+ end
42
+
43
+ # Creates a new item
44
+ #
45
+ # @requires_apikey Yes
46
+ # @param options [Hash] A set of attributes to create a new item
47
+ # @return [HTTParty::Response]
48
+ def create_item(options={})
49
+ self.class.post("/items.json?apikey=#{apikey}", :query => { :item => options })
50
+ end
51
+
52
+ # Reloads all items
53
+ #
54
+ # @requires_apikey Yes
55
+ # @return [HTTParty::Response]
56
+ def reload_items
57
+ self.class.post("/items/reload.json?apikey=#{apikey}")
58
+ end
59
+
60
+ # Adds a service to the item
61
+ #
62
+ # @requires_apikey Yes
63
+ # @param id [String] The numerical ID of the related item
64
+ # @param options [Hash] A set of attributes for a service to add to the item
65
+ # @return [HTTParty::Response]
66
+ def add_service_to_item(id, options={})
67
+ self.class.post("/items/#{id}/services.json?apikey=#{apikey}", :query => { :service => options })
68
+ end
69
+
70
+ # Updates the desired item
71
+ #
72
+ # @requires_apikey Yes
73
+ # @param id [String] The numerical ID of the desired item
74
+ # @param options [Hash] A set of attributes to update the item
75
+ # @return [HTTParty::Response]
76
+ def update_item(id, options={})
77
+ self.class.put("/items/#{id}.json?apikey=#{apikey}", :query => {:item => options}, :body => {})
78
+ end
79
+
80
+ # Deletes the item
81
+ #
82
+ # @requires_apikey Yes
83
+ # @param id [String] The numerical ID of the desired item
84
+ # @return [HTTParty::Response]
85
+ def destroy_item(id)
86
+ self.class.delete("/items/#{id}.json?apikey=#{apikey}")
87
+ end
88
+
89
+ # Removes a service from the item
90
+ #
91
+ # @requires_apikey Yes
92
+ # @param args [Array] A set of params to remove a service from the item
93
+ # @option args [String] The numerical ID of the related item
94
+ # @option args [String] The numerical ID of the service to remove
95
+ # @return [HTTParty::Response]
96
+ def remove_service_from_item(*args)
97
+ raise ArgumentError.new('The method `remove_service_from_item` requires 2 arguments (item-id and service-id)') if args.size != 2
98
+ self.class.delete("/items/#{args[0]}/services/#{args[-1]}.json?apikey=#{apikey}")
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,23 @@
1
+ module Giraffi
2
+ class Client
3
+ # Defines methods related to the logs generated by the Giraffi
4
+
5
+ module Logs
6
+ # Returns the desired logs related to the axions
7
+ #
8
+ # @param options [Hash] The request params to retrieve the desired logs
9
+ # @return [HTTParty::Response]
10
+ def find_axion_logs(options={})
11
+ self.class.get("/logs/axion.json?apikey=#{apikey}", query: options)
12
+ end
13
+
14
+ # Returns the number of logs related to the axions
15
+ #
16
+ # @param options [Hash] The request params to retrieve the desired logs to count
17
+ # @return [HTTParty::Response]
18
+ def count_axion_logs(options={})
19
+ self.class.get("/logs/axion/count.json?apikey=#{apikey}", query: options)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,67 @@
1
+ module Giraffi
2
+ class Client
3
+ # Defines methods related to the media
4
+
5
+ module Media
6
+ # Returns the desired media
7
+ #
8
+ # @param options [Hash] The request params to retrieve the desired media
9
+ # @return [HTTParty::Response]
10
+ def find_media(options={})
11
+ self.class.get("/media.json?apikey=#{apikey}", :query => options)
12
+ end
13
+
14
+ # Returns the desired medium
15
+ #
16
+ # @param id [String] The numerical ID of the desired medium
17
+ # @return [HTTParty::Response]
18
+ def find_medium(id)
19
+ self.class.get("/media/#{id}.json?apikey=#{apikey}")
20
+ end
21
+
22
+ # Returns the desired oauth
23
+ #
24
+ # @param id [String] The numerical ID of the desired medium
25
+ # @return [HTTParty::Response]
26
+ def find_oauth_by_medium(id)
27
+ self.class.get("/media/#{id}/oauth.json?apikey=#{apikey}")
28
+ end
29
+
30
+ # Returns the oauth-callbacks related to the medium
31
+ #
32
+ # @param args [Array] A set of params to retrieve the desired oauth-callback
33
+ # @option args [String] The numerical ID of the desired medium
34
+ # @option args [String] The oauth verifier related to the callback
35
+ # @return [HTTParty::Response]
36
+ def find_oauth_callback_by_medium(*args)
37
+ raise ArgumentError.new('The method `find_oauth_callback_by_medium` requires 2 arguments(medium-id and oauth-token)') if args.size != 2
38
+ self.class.get("/media/#{args[0]}/oauth_callback.json?apikey=#{apikey}", :query => {:oauth_verifier => args[-1]})
39
+ end
40
+
41
+ # Creates a new medium
42
+ #
43
+ # @param options [Hash] A set of attributes to create a new medium
44
+ # @return [HTTParty::Response]
45
+ def create_medium(options={})
46
+ self.class.post("/media.json?apikey=#{apikey}", :query => { :medium => options })
47
+ end
48
+
49
+ # Updates the desired medium
50
+ #
51
+ # @param id [String] The numerical ID of the desired medium
52
+ # @param options [Hash] A set of attributes to update the medium
53
+ # @return [HTTParty::Response]
54
+ def update_medium(id, options={})
55
+ self.class.put("/media/#{id}.json?apikey=#{apikey}", :query => {:medium => options}, :body => {})
56
+ end
57
+
58
+ # Deletes the medium
59
+ #
60
+ # @param id [String] The numerical ID of the desired medium
61
+ # @return [HTTParty::Response]
62
+ def destroy_medium(id)
63
+ self.class.delete("/media/#{id}?apikey=#{apikey}")
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,25 @@
1
+ module Giraffi
2
+ class Client
3
+ # Defines methods related to the monitoring data
4
+
5
+ module Monitoringdata
6
+ # Returns the desired monitoring data
7
+ #
8
+ # @requires_apikey Yes
9
+ # @param options [Hash] The request params to retrieve the desired monitoring data
10
+ # @return [HTTParty::Response]
11
+ def find_monitoringdata(options={})
12
+ self.class.get("/monitoringdata.json?apikey=#{apikey}", query: options)
13
+ end
14
+
15
+ # Posts the monitoring data to the Giraffi
16
+ #
17
+ # @requires_apikey Yes
18
+ # @param options [Hash] The monitoring data to post to the Giraffi
19
+ # @return [HTTParty::Response]
20
+ def add_monitoringdata(options={})
21
+ self.class.post("#{monitoringdata_endpoint}/internal/nodelayed?apikey=#{apikey}", :body => MultiJson.encode({:internal => options}))
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,19 @@
1
+ module Giraffi
2
+ class Client
3
+ # Defines methods related to the status of endpoints
4
+
5
+ module MyCurrentStatus
6
+ # Returns the current status of the desired endpoint
7
+ #
8
+ # @requires_apikey No
9
+ # @param options [String] The alias string of the desired endpoint
10
+ # @return [HTTParty::Response]
11
+ def my_current_status(options="")
12
+ uri = to_uri options.to_sym
13
+ raise StandardError.new("The given key `#{options}` is not valid.") if uri.nil?
14
+ self.class.get("#{uri}/my_current_status.json")
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ module Giraffi
2
+ class Client
3
+ # Defines methods related to the regions
4
+
5
+ module Regions
6
+ # Returns all available regions
7
+ #
8
+ # @requires_apikey Yes
9
+ # @return [HTTParty::Response]
10
+ def find_regions
11
+ self.class.get("/regions.json?apikey=#{apikey}")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,97 @@
1
+ module Giraffi
2
+ class Client
3
+ # Defines methods related to the services
4
+
5
+ module Services
6
+ # Returns the desired services
7
+ #
8
+ # @requires_apikey Yes
9
+ # @param options [Hash] The request params to retrieve the desired services
10
+ # @return [HTTParty::Response]
11
+ def find_services(options={})
12
+ self.class.get("/services.json?apikey=#{apikey}", :query => options)
13
+ end
14
+
15
+ # Returns the desired service
16
+ #
17
+ # @requires_apikey Yes
18
+ # @param id [String] The numerical ID of the desired service
19
+ # @return [HTTParty::Response]
20
+ def find_service(id)
21
+ self.class.get("/services/#{id}.json?apikey=#{apikey}")
22
+ end
23
+
24
+ # Returns the region related to the desired service
25
+ #
26
+ # @requires_apikey Yes
27
+ # @param id [String] The numerical ID of the desired service
28
+ # @return [HTTParty::Response]
29
+ def find_region_by_service(id)
30
+ self.class.get("/services/#{id}/regions.json?apikey=#{apikey}")
31
+ end
32
+
33
+ # Returns all triggers related to the desired service
34
+ #
35
+ # @requires_apikey Yes
36
+ # @param id [String] The numerical ID of the desired service
37
+ # @return [HTTParty::Response]
38
+ def find_triggers_by_service(id)
39
+ self.class.get("/services/#{id}/triggers.json?apikey=#{apikey}")
40
+ end
41
+
42
+ # Adds a trigger to the service
43
+ #
44
+ # @requires_apikey Yes
45
+ # @param id [String] The numerical ID of the related service
46
+ # @param options [Hash] A set of attributes for a trigger to add to the service
47
+ # @return [HTTParty::Response]
48
+ def add_trigger_to_service(id, options={})
49
+ self.class.post("/services/#{id}/triggers.json?apikey=#{apikey}", :query => {:trigger => options})
50
+ end
51
+
52
+ # Updates the desired service
53
+ #
54
+ # @requires_apikey Yes
55
+ # @param id [String] The numerical ID of the desired service
56
+ # @param options [Hash] A set of attributes to update the service
57
+ # @return [HTTParty::Response]
58
+ def update_service(id, options={})
59
+ self.class.put("/services/#{id}.json?apikey=#{apikey}", :query => {:service => options}, :body => {})
60
+ end
61
+
62
+ # Updates the region related to the service
63
+ #
64
+ # @requires_apikey Yes
65
+ # @param args [Array] A set of params to update the region
66
+ # @option args [String] The numerical ID of the related service
67
+ # @option args [String] The region code(e.g JP) to update
68
+ # @return [HTTParty::Response]
69
+ def update_region_of_service(*args)
70
+ raise ArgumentError.new('The method `update_region_of_service` requires 2 arguments (service-id and region-code).') if args.size != 2
71
+ self.class.put("/services/#{args[0]}/regions/#{args[-1]}.json?apikey=#{apikey}", :body => {})
72
+ end
73
+
74
+ # Deletes the service
75
+ #
76
+ # @requires_apikey Yes
77
+ # @param id [String] The numerical ID of the desired service
78
+ # @return [HTTParty::Response]
79
+ def destroy_service(id)
80
+ self.class.delete("/services/#{id}.json?apikey=#{apikey}")
81
+ end
82
+
83
+ # Removes a trigger from the service
84
+ #
85
+ # @requires_apikey Yes
86
+ # @param args [Array] A set of params to remove a trigger from the service
87
+ # @option args [String] The numerical ID of the related service
88
+ # @option args [String] The numerical ID of the trigger to remove
89
+ # @return [HTTParty::Response]
90
+ def remove_trigger_from_service(*args)
91
+ raise ArgumentError.new('The method `remove_trigger_from_service` requires 2 arguments (service-id and trigger-id).') if args.size != 2
92
+ self.class.delete("/services/#{args[0]}/triggers/#{args[-1]}.json?apikey=#{apikey}")
93
+ end
94
+ end
95
+ end
96
+ end
97
+
@@ -0,0 +1,25 @@
1
+ module Giraffi
2
+ class Client
3
+ # Defines methods related to the trend data
4
+
5
+ module Trends
6
+ # Returns the desired trend data(average)
7
+ #
8
+ # @requires_apikey Yes
9
+ # @param options [Hash] The request params to retrieve the desired trend data(average)
10
+ # @return [HTTParty::Response]
11
+ def find_average_trends(options={})
12
+ self.class.get("/trends/average.json?apikey=#{apikey}", query: options)
13
+ end
14
+
15
+ # Returns the desired trend data(failure)
16
+ #
17
+ # @requires_apikey Yes
18
+ # @param options [Hash] The request params to retrieve the desired trend data(failure)
19
+ # @return [HTTParty::Response]
20
+ def find_failure_trends(options={})
21
+ self.class.get("/trends/failure.json?apikey=#{apikey}", query: options)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,94 @@
1
+ module Giraffi
2
+ class Client
3
+ # Defines methods related to the triggers
4
+
5
+ module Triggers
6
+ # Returns the desired trigger
7
+ #
8
+ # @requires_apikey Yes
9
+ # @param options [Hash] The request params to retrieve the desired triggers
10
+ # @return [HTTParty::Response]
11
+ def find_triggers(options={})
12
+ self.class.get("/triggers.json?apikey=#{apikey}", :query => options)
13
+ end
14
+
15
+ # Returns the desired trigger
16
+ #
17
+ # @requires_apikey Yes
18
+ # @param id [String] The numerical ID of the desired trigger
19
+ # @return [HTTParty::Response]
20
+ def find_trigger(id)
21
+ self.class.get("/triggers/#{id}.json?apikey=#{apikey}")
22
+ end
23
+
24
+ # Returns all axions related to the desired trigger
25
+ #
26
+ # @requires_apikey Yes
27
+ # @param args [Array] A set of params to retrieve axions related to the trigger
28
+ # @option args [String] The numerical ID of the related trigger
29
+ # @option args [String] The kind of axion [problem, recovery] to retrieve
30
+ # @return [HTTParty::Response]
31
+ def find_axions_by_trigger(*args)
32
+ raise ArgumentError.new('The method `find_axions_by_trigger` requires at least a trigger id.') if args.size.zero?
33
+ if args.size == 1
34
+ self.class.get("/triggers/#{args[0]}/axions.json?apikey=#{apikey}")
35
+ else
36
+ self.class.get("/triggers/#{args[0]}/axions.json?apikey=#{apikey}", :query => {:axionkind => args[-1]})
37
+ end
38
+ end
39
+
40
+ # Executes all axions related to the desired trigger
41
+ #
42
+ # @requires_apikey Yes
43
+ # @param id [String] The numerical ID of the desired trigger
44
+ # @return [HTTParty::Response]
45
+ def execute_axions_by_trigger(id)
46
+ self.class.post("/triggers/#{id}/axions/execute.json?apikey=#{apikey}")
47
+ end
48
+
49
+ # Updates the desired trigger
50
+ #
51
+ # @requires_apikey Yes
52
+ # @param id [String] The numerical ID of the desired trigger
53
+ # @param options [Hash] A set of attributes to update the trigger
54
+ # @return [HTTParty::Response]
55
+ def update_trigger(id, options={})
56
+ self.class.put("/triggers/#{id}.json?apikey=#{apikey}", :query => {:trigger => options}, :body => {})
57
+ end
58
+
59
+ # Updates the axion related to the desired trigger
60
+ #
61
+ # @requires_apikey Yes
62
+ # @param args [Array] A set of parmas to update the axion related to the trigger
63
+ # @option args [String] The numerical ID of the related trigger
64
+ # @option args [String] The numerical ID of the desired axion
65
+ # @option args [String] The kind of axion [problem, recovery] to update
66
+ # @return [HTTParty::Response]
67
+ def update_axion_of_trigger(*args)
68
+ raise ArgumentError.new('The method `update_axion_by_trigger` requires 3 argments (trigger-id, axion-id and axion-kind)') if args.size != 3
69
+ self.class.put("/triggers/#{args[0]}/axions/#{args[1]}.json?apikey=#{apikey}", :query => { :axionkind => args[-1] }, :body => {})
70
+ end
71
+
72
+ # Deletes the trigger
73
+ #
74
+ # @requires_apikey Yes
75
+ # @param id [String] The numerical ID of the desired trigger
76
+ # @return [HTTParty::Response]
77
+ def destroy_trigger(id)
78
+ self.class.delete("/triggers/#{id}.json?apikey=#{apikey}")
79
+ end
80
+
81
+ # Removes an axion from the trigger
82
+ #
83
+ # @requires_apikey Yes
84
+ # @param args [Array] A set of parmas to remove an axion from the trigger
85
+ # @option args [String] The numerical ID of the related trigger
86
+ # @option args [String] The numerical ID of the axion to remove
87
+ # @return [HTTParty::Response]
88
+ def remove_axion_from_trigger(*args)
89
+ raise ArgumentError.new('The method `remove_axion_from_trigger` requires 2 arguments (trigger-id and axion-id)') if args.size != 2
90
+ self.class.delete("/triggers/#{args[0]}/axions/#{args[-1]}.json?apikey=#{apikey}")
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,73 @@
1
+ require 'httparty'
2
+ require 'multi_json'
3
+ require 'giraffi/config'
4
+
5
+ module Giraffi
6
+ # Warpper for the Giraffi RESTful API
7
+
8
+ class Client
9
+ include MultiJson
10
+ include HTTParty
11
+ base_uri Config::DEFAULT_ENDPOINT
12
+ headers Config::DEFAULT_REQUEST_HEADERS
13
+ format :plain #:json
14
+ #debug_output
15
+
16
+ # Requires client method modules
17
+ require 'giraffi/client/items'
18
+ require 'giraffi/client/services'
19
+ require 'giraffi/client/media'
20
+ require 'giraffi/client/axions'
21
+ require 'giraffi/client/applogs'
22
+ require 'giraffi/client/logs'
23
+ require 'giraffi/client/monitoringdata'
24
+ require 'giraffi/client/my_current_status'
25
+ require 'giraffi/client/regions'
26
+ require 'giraffi/client/trends'
27
+ require 'giraffi/client/triggers'
28
+
29
+ include Giraffi::Client::Items
30
+ include Giraffi::Client::Services
31
+ include Giraffi::Client::Media
32
+ include Giraffi::Client::Axions
33
+ include Giraffi::Client::Applogs
34
+ include Giraffi::Client::Logs
35
+ include Giraffi::Client::Monitoringdata
36
+ include Giraffi::Client::MyCurrentStatus
37
+ include Giraffi::Client::Regions
38
+ include Giraffi::Client::Trends
39
+ include Giraffi::Client::Triggers
40
+
41
+ # @return [Array] the attributes +Config::VALID_OPTIONS_KEYS+ as a Array
42
+ attr_accessor *Config::VALID_OPTIONS_KEYS
43
+
44
+ # Examines a bad response and raise an appropriate error
45
+ #
46
+ # @param response [HTTParty::Response]
47
+ def bad_response(response)
48
+ if response.class == HTTParty::Response
49
+ raise ResponseError, response
50
+ end
51
+ raise StandardError, "Unknown error"
52
+ end
53
+
54
+ # Initializes a new API object
55
+ #
56
+ # @param attrs [Hash] The options allows you to access the Giraffi RESTful API
57
+ # @return [Giraffi::Client]
58
+ def initialize(attrs={})
59
+ attrs = Giraffi.options.merge(attrs)
60
+ Config::VALID_OPTIONS_KEYS.each do |key|
61
+ instance_variable_set("@#{key}".to_sym, attrs[key])
62
+ end
63
+ end
64
+
65
+ # Returns the URL related to the given key
66
+ #
67
+ # @param options [Symbol] The keyword related to the real URI
68
+ # @return [String] URI or nil when no matching value
69
+ def to_uri(key)
70
+ {papi: endpoint,okapi: monitoringdata_endpoint,lapi: applogs_endpoint}[key] || nil
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,60 @@
1
+ require 'giraffi/version'
2
+
3
+ module Giraffi
4
+ # Defines constants and methods related to configuration
5
+ module Config
6
+
7
+ # The HTTP request header if none is set
8
+ DEFAULT_REQUEST_HEADERS = {
9
+ "User-Agent" => "Giraffi Ruby Gem #{Giraffi::Version}",
10
+ "Accept" => "application/json",
11
+ "Content-Type" => "application/json"
12
+ }
13
+
14
+ # The basic endpoint if none is set
15
+ DEFAULT_ENDPOINT = 'https://papi.giraffi.jp'
16
+
17
+ # The endpoint for posting the monitoringdata if none is set
18
+ DEFAULT_MONITORINGDATA_ENDPOINT = 'https://okapi.giraffi.jp:3007'
19
+
20
+ # The endpoint for posting the application logs if none is set
21
+ DEFAULT_APPLOGS_ENDPOINT = 'https://lapi.giraffi.jp:3443'
22
+
23
+ # The APIKEY to allow you to use the Giraffi API if none is set
24
+ DEFAULT_APIKEY = nil
25
+
26
+ # An array of valid keys in the options hash when configuring a {Giraffi::Client}
27
+ VALID_OPTIONS_KEYS = [
28
+ :request_headers,
29
+ :endpoint,
30
+ :monitoringdata_endpoint,
31
+ :applogs_endpoint,
32
+ :apikey
33
+ ]
34
+
35
+ # @return [Array] the attribute +VALID_OPTIONS_KEYS+ as an Array
36
+ attr_accessor *VALID_OPTIONS_KEYS
37
+
38
+ # Set all configuration options to thier values when this module is extended
39
+ def self.extended(base)
40
+ base.reset
41
+ end
42
+
43
+ # Create a hash of options and thier values
44
+ def options
45
+ options = {}
46
+ VALID_OPTIONS_KEYS.each{|k| options[k] = send(k)}
47
+ options
48
+ end
49
+
50
+ # Reset all configuration options to defaults
51
+ def reset
52
+ self.request_headers = DEFAULT_REQUEST_HEADERS
53
+ self.endpoint = DEFAULT_ENDPOINT
54
+ self.monitoringdata_endpoint = DEFAULT_MONITORINGDATA_ENDPOINT
55
+ self.applogs_endpoint = DEFAULT_APPLOGS_ENDPOINT
56
+ self.apikey = DEFAULT_APIKEY
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,3 @@
1
+ module Giraffi
2
+ Version = '0.1.3'
3
+ end
data/lib/giraffi.rb ADDED
@@ -0,0 +1,26 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+ require 'giraffi/client'
3
+ require 'giraffi/config'
4
+
5
+ module Giraffi
6
+ extend Config
7
+ class << self
8
+ # Alias for Giraffi::Client.new
9
+ #
10
+ # @param options [Hash] The APIKEY allows you to access the Giraffi RESTful API
11
+ # @return [Giraffi::Client]
12
+ def new(options={})
13
+ Giraffi::Client.new(options)
14
+ end
15
+
16
+ # Delegate to Giraffi::Client
17
+ def method_missing(method, *args, &blocks)
18
+ return super unless new.respond_to?(method)
19
+ new.send(method, *args, &block)
20
+ end
21
+
22
+ def respond_to?(method, include_private=false)
23
+ new.respond_to?(method, include_private) || super(method, include_private)
24
+ end
25
+ end
26
+ end