api_analytics 1.0.1 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +38 -23
- data/lib/api_analytics/version.rb +1 -1
- data/lib/api_analytics.rb +8 -13
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '098d01b85d0fcc21c62cfd725e9627023215347bf514984ce32439c8ad14b032'
|
4
|
+
data.tar.gz: 0e9afbc15ee1ffd011c344fb9fded1afeba64381b1040e5e01b42ef422dc5d5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 452d37e57dbcb9fa71fff792238de09f49bc3f0cb6538417478087b553f8dd18bfadeaaca2757706f15872e01ea693d0bcfa0824c4867b8b557febd9de8cab54
|
7
|
+
data.tar.gz: 5dc72c197e4d12fcabcfa4e12f1a7f42e1f7d0496095ccde7e981b2d12d64a0e02cd48e1167355c194ac3ed1526696b7fc221e773efe1cef2c3809ad94ce8648
|
data/README.md
CHANGED
@@ -1,43 +1,58 @@
|
|
1
|
-
#
|
1
|
+
# API Analytics
|
2
2
|
|
3
|
-
|
3
|
+
A lightweight API analytics solution, complete with a dashboard.
|
4
4
|
|
5
|
-
|
5
|
+
## Getting Started
|
6
6
|
|
7
|
-
|
7
|
+
### 1. Generate a new API key
|
8
8
|
|
9
|
-
|
9
|
+
Head to https://my-api-analytics.vercel.app/generate to generate your unique API key with a single click. This key is used to monitor your specific API, so keep it secret! It's also required in order to view your APIs analytics dashboard.
|
10
10
|
|
11
|
-
|
12
|
-
gem 'api_analytics'
|
13
|
-
```
|
11
|
+
### 2. Add middleware to your API
|
14
12
|
|
15
|
-
|
13
|
+
Add our lightweight middleware to your API. Almost all processing is handled by our servers so there should be virtually no impact on your APIs performance.
|
16
14
|
|
17
|
-
|
15
|
+
```bash
|
16
|
+
gem install api_analytics
|
17
|
+
```
|
18
18
|
|
19
|
-
|
19
|
+
#### Rails
|
20
20
|
|
21
|
-
|
21
|
+
Add the analytics middleware to your rails application in `config/application.rb`.
|
22
22
|
|
23
|
-
|
23
|
+
```ruby
|
24
|
+
require 'rails'
|
25
|
+
require 'api_analytics'
|
24
26
|
|
25
|
-
|
27
|
+
Bundler.require(*Rails.groups)
|
26
28
|
|
27
|
-
|
29
|
+
module RailsMiddleware
|
30
|
+
class Application < Rails::Application
|
31
|
+
config.load_defaults 6.1
|
32
|
+
config.api_only = true
|
28
33
|
|
29
|
-
|
34
|
+
config.middleware.use ::Analytics::Middleware, <api_key> # Add middleware
|
35
|
+
end
|
36
|
+
end
|
37
|
+
```
|
30
38
|
|
31
|
-
|
39
|
+
#### Sinatra
|
32
40
|
|
33
|
-
|
41
|
+
```ruby
|
42
|
+
require 'sinatra'
|
43
|
+
require 'api_analytics'
|
34
44
|
|
35
|
-
|
45
|
+
use Analytics::Middleware, <api_key>
|
36
46
|
|
37
|
-
|
47
|
+
before do
|
48
|
+
content_type 'application/json'
|
49
|
+
end
|
38
50
|
|
39
|
-
|
51
|
+
get '/' do
|
52
|
+
{message: 'Hello World!'}.to_json
|
53
|
+
end
|
54
|
+
```
|
40
55
|
|
41
|
-
|
56
|
+
### 3. View your analytics
|
42
57
|
|
43
|
-
|
58
|
+
Your API will log requests on all valid routes. Head over to https://my-api-analytics.vercel.app/dashboard and paste in your API key to view your dashboard.
|
data/lib/api_analytics.rb
CHANGED
@@ -1,22 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'uri'
|
3
4
|
require 'net/http'
|
4
5
|
require 'json'
|
5
|
-
require_relative "api_analytics/version"
|
6
6
|
|
7
7
|
module Analytics
|
8
8
|
class Middleware
|
9
|
-
def initialize(app)
|
9
|
+
def initialize(app, api_key)
|
10
10
|
@app = app
|
11
|
-
@api_key =
|
12
|
-
raise StandardError.new 'ANALYTICS_API_KEY secret unset.' if @api_key.nil?
|
11
|
+
@api_key = api_key
|
13
12
|
end
|
14
13
|
|
15
14
|
def call(env)
|
16
15
|
start = Time.now
|
17
16
|
status, headers, response = @app.call(env)
|
18
17
|
|
19
|
-
|
18
|
+
data = {
|
20
19
|
api_key: @api_key,
|
21
20
|
hostname: env['HTTP_HOST'],
|
22
21
|
path: env['REQUEST_PATH'],
|
@@ -28,7 +27,7 @@ module Analytics
|
|
28
27
|
}
|
29
28
|
|
30
29
|
Thread.new {
|
31
|
-
log_request(
|
30
|
+
log_request(data)
|
32
31
|
}
|
33
32
|
|
34
33
|
[status, headers, response]
|
@@ -36,16 +35,12 @@ module Analytics
|
|
36
35
|
|
37
36
|
private
|
38
37
|
|
39
|
-
def log_request(
|
38
|
+
def log_request(data)
|
40
39
|
uri = URI('https://api-analytics-server.vercel.app/api/log-request')
|
41
|
-
|
42
|
-
Rails.logger.info("#{uri.host} #{uri.port} #{uri.path}")
|
43
|
-
req = Net::HTTP::Post.new(uri.path, 'Content-Type' => 'application/json')
|
44
|
-
req.body = json.to_json
|
45
|
-
res = http.request(req)
|
46
|
-
rescue => e
|
40
|
+
res = Net::HTTP.post(uri, data.to_json)
|
47
41
|
end
|
48
42
|
end
|
49
43
|
end
|
50
44
|
|
51
45
|
|
46
|
+
|