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.
Files changed (3) hide show
  1. data/bin/level3_rtm_stats +10 -0
  2. data/lib/level3-api.rb +68 -0
  3. 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: