giraffi 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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