-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmariadb-api.js
69 lines (59 loc) · 1.98 KB
/
mariadb-api.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
var maria = require('./lib/mysql-promised.js')
var app = require('express')()
const ver = '/v1/'
const Presenter = require('yayson')({
adapter: 'default'
}).Presenter;
var resources = [
'./resources/users.js',
'./resources/tables.js',
'./resources/variables.js',
'./resources/innodb_metrics.js',
'./resources/innodb_mutexes.js',
'./resources/innodb_no_pk_tables.js',
'./resources/redundant_keys.js',
'./resources/partitions.js',
]
types = []
resources.forEach((i) => {
var mod = require(i)
class JSONPresenter extends Presenter {};
JSONPresenter.prototype.type = mod.type;
types.push({id: mod.type})
if (mod.collection) {
app.get(ver + mod.type, (req, res) => {
mod.collection()
.then((results) => {
res.send(JSON.stringify(JSONPresenter.render(results), null, 4))
})
.catch((err) => {
res.send(err)
})
})
}
if (mod.resource) {
app.get(ver + mod.type + '/:id', (req, res) => {
mod.resource(req.params.id)
.then((results) => {
if (results && results.length > 0) {
res.send(JSON.stringify(JSONPresenter.render(results[0]), null, 4))
} else {
res.status(404).send()
}
})
.catch((err) => {
res.send(err)
})
})
}
})
// Add collection that describes all endpoints
app.get(ver + 'endpoints', (req, res) => {
types.forEach((i) => {
i.url = 'http://' + req.hostname + ':' + maria.config.listen + '/v1/' + i.id
})
class EndpointPresenter extends Presenter {}
EndpointPresenter.prototype.type = 'endpoints'
res.send(JSON.stringify(EndpointPresenter.render(types), null, 4))
})
app.listen(maria.config.listen, () => console.log('API listening on port ' + maria.config.listen))