level3-api 0.1.0
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.
- data/bin/level3_rtm_stats +10 -0
- data/lib/level3-api.rb +68 -0
- metadata +97 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'level3-api'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
l3 = Level3.new(ENV['LEVEL3APIKEY'],ENV['LEVEL3APISECRET'])
|
7
|
+
accessgroups = l3.request('/accessGroups',"/v1.0") # --TODO assuming only 1 for now
|
8
|
+
stats = l3.request('/rtm/cdn',"/v1.0/#{accessgroups['id']}","GET",{'serviceType'=>'c','property'=>'true'})
|
9
|
+
puts JSON.pretty_generate stats
|
10
|
+
|
data/lib/level3-api.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'hmac-sha1'
|
4
|
+
require 'rest-client'
|
5
|
+
require 'base64'
|
6
|
+
require 'xmlsimple'
|
7
|
+
|
8
|
+
# --TODO use nokogiri w/ xsi?
|
9
|
+
|
10
|
+
class Level3Api
|
11
|
+
# key_id = Level 3 API Key
|
12
|
+
# secret = Level 3 API Secret
|
13
|
+
def initialize(key_id,secret)
|
14
|
+
@api_url_base = "https://ws.level3.com"
|
15
|
+
@key_id = key_id # required
|
16
|
+
@secret = secret # required
|
17
|
+
raise 'No key_id' unless @key_id
|
18
|
+
raise 'No secret' unless @secret
|
19
|
+
@content_type = 'text/xml'
|
20
|
+
end
|
21
|
+
# Time is only considered valid for authentication for 15 minutes on level3...
|
22
|
+
# We reset it once each pass just to make sure it does not expire
|
23
|
+
def set_date
|
24
|
+
@current_date = Time.now
|
25
|
+
end
|
26
|
+
def formatted_date
|
27
|
+
return @current_date.gmtime.strftime("%a, %d %b %Y %H:%M:%S GMT")
|
28
|
+
end
|
29
|
+
def generate_auth_string(service,resource,method)
|
30
|
+
authstring = "%s\n%s%s\n%s\n%s\n" % [
|
31
|
+
formatted_date,
|
32
|
+
service.chomp('/'),
|
33
|
+
resource.chomp('/'),
|
34
|
+
@content_type,
|
35
|
+
method
|
36
|
+
]
|
37
|
+
hmac = HMAC::SHA1.new(@secret)
|
38
|
+
hmac.update(authstring)
|
39
|
+
return "MPA %s:%s" % [@key_id, Base64.encode64(hmac.digest)]
|
40
|
+
end
|
41
|
+
# Attempt to mash XML into a parseable ruby structure
|
42
|
+
def _from_xml(xml)
|
43
|
+
return XmlSimple.xml_in(xml, {
|
44
|
+
'ForceArray'=>['accessGroup'],
|
45
|
+
'GroupTags'=>{
|
46
|
+
'services'=>'service',
|
47
|
+
'metros'=>'metro',
|
48
|
+
'networkIdentifiers'=>'ni'
|
49
|
+
},
|
50
|
+
'KeyAttr'=>['id','name']
|
51
|
+
})
|
52
|
+
end
|
53
|
+
def request(service="/accessGroups",resource="/v1.0",method="GET",params={})
|
54
|
+
set_date
|
55
|
+
authstr = generate_auth_string(service,resource,method)
|
56
|
+
url = "#{@api_url_base}#{service}#{resource}"
|
57
|
+
puts "request: url=#{url}"
|
58
|
+
xml = RestClient.get url,
|
59
|
+
:content_type => @content_type,
|
60
|
+
:authorization => authstr,
|
61
|
+
:date => formatted_date,
|
62
|
+
:verify_ssl => OpenSSL::SSL::VERIFY_PEER,
|
63
|
+
:params => params
|
64
|
+
return _from_xml(xml)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
metadata
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: level3-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- David Nicklay
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-03-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: xml-simple
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rest-client
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: ruby-hmac
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: Level 3 API gem
|
63
|
+
email: david-vv@nicklay.com
|
64
|
+
executables:
|
65
|
+
- level3_rtm_stats
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- lib/level3-api.rb
|
70
|
+
- bin/level3_rtm_stats
|
71
|
+
homepage: https://github.com/venturaville/level3-gem
|
72
|
+
licenses:
|
73
|
+
- MIT
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
requirements: []
|
91
|
+
rubyforge_project:
|
92
|
+
rubygems_version: 1.8.23
|
93
|
+
signing_key:
|
94
|
+
specification_version: 3
|
95
|
+
summary: Level3 API Gem
|
96
|
+
test_files: []
|
97
|
+
has_rdoc:
|