profoundjs-swagger-stats 1.1.4 → 2.0.1

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 (87) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dashboards/prometheus/swagger-stats dashboard v3.json +1269 -0
  3. package/examples/authtest/authtest.js +5 -10
  4. package/examples/fastify/fasifytest.js +24 -5
  5. package/examples/hapijstest/hapijstest.js +17 -2
  6. package/examples/restify/restifytest.js +16 -1
  7. package/examples/spectest/spectest.js +7 -9
  8. package/examples/testapp/petstore.json +1699 -0
  9. package/examples/testapp/testapp.js +6 -62
  10. package/lib/sws-api-swagger.yaml +1 -1
  11. package/lib/swsAPIStats.js +6 -1
  12. package/lib/swsAuth.js +140 -0
  13. package/lib/swsElasticEmitter.js +103 -45
  14. package/lib/swsHapi.js +29 -34
  15. package/lib/swsInterface.js +40 -189
  16. package/lib/swsProcessor.js +6 -1
  17. package/lib/swsReqResStats.js +1 -1
  18. package/lib/swsUtil.js +7 -21
  19. package/lib/swssettings.js +8 -2
  20. package/package.json +90 -91
  21. package/schema/elasticsearch/api_index_template.json +1 -1
  22. package/schema/elasticsearch/api_index_template_7x.json +185 -0
  23. package/scripts/elasticsearch/elastic7/docker-compose.yml +6 -17
  24. package/scripts/elasticsearch/elastic8/docker-compose.yml +34 -0
  25. package/ux/css/app.dc22c4da.css +7 -0
  26. package/ux/css/chunk-vendors.a6da6d7a.css +10 -0
  27. package/ux/fonts/KFOkCnqEu92Fr1MmgVxIIzQ.4aa2e698.woff +0 -0
  28. package/ux/fonts/KFOlCnqEu92Fr1MmEU9fBBc-.40bcb2b8.woff +0 -0
  29. package/ux/fonts/KFOlCnqEu92Fr1MmSU5fBBc-.ea60988b.woff +0 -0
  30. package/ux/fonts/KFOlCnqEu92Fr1MmWUlfBBc-.0774a8b7.woff +0 -0
  31. package/ux/fonts/KFOlCnqEu92Fr1MmYUtfBBc-.bcb7c7e2.woff +0 -0
  32. package/ux/fonts/KFOmCnqEu92Fr1Mu4mxM.d3907d0c.woff +0 -0
  33. package/ux/fonts/fa-brands-400.1a575a41.woff +0 -0
  34. package/ux/fonts/fa-brands-400.ed311c7a.woff2 +0 -0
  35. package/ux/fonts/fa-regular-400.b91d376b.woff2 +0 -0
  36. package/ux/fonts/fa-regular-400.d1d7e3b4.woff +0 -0
  37. package/ux/fonts/fa-solid-900.d745348d.woff +0 -0
  38. package/ux/fonts/fa-solid-900.d824df7e.woff2 +0 -0
  39. package/ux/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.3e1afe59.woff +0 -0
  40. package/ux/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.a4160421.woff2 +0 -0
  41. package/ux/index.html +1 -1
  42. package/ux/js/app.d095d0d6.js +1 -0
  43. package/ux/js/chunk-2d0b90b4.afe783bc.js +8 -0
  44. package/ux/js/chunk-2d0daf1e.a05fda31.js +11 -0
  45. package/ux/js/chunk-461883cd.a2aa4876.js +82 -0
  46. package/ux/js/chunk-vendors.4f167dc9.js +39 -0
  47. package/ux/logo.png +0 -0
  48. package/.editorconfig +0 -21
  49. package/.travis.yml +0 -23
  50. package/dashboards/prometheus/swagger-stats dashboard.json +0 -1118
  51. package/dist/css/sws.min.css +0 -18
  52. package/dist/fonts/FontAwesome.otf +0 -0
  53. package/dist/fonts/fontawesome-webfont.eot +0 -0
  54. package/dist/fonts/fontawesome-webfont.svg +0 -2671
  55. package/dist/fonts/fontawesome-webfont.ttf +0 -0
  56. package/dist/fonts/fontawesome-webfont.woff +0 -0
  57. package/dist/fonts/fontawesome-webfont.woff2 +0 -0
  58. package/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  59. package/dist/fonts/glyphicons-halflings-regular.svg +0 -288
  60. package/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  61. package/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  62. package/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
  63. package/dist/images/favicon.png +0 -0
  64. package/dist/js/sws.min.js +0 -1
  65. package/gulpfile.js +0 -103
  66. package/karma.conf.js +0 -153
  67. package/ux/css/app.71245b0e.css +0 -7
  68. package/ux/css/chunk-vendors.809c52d1.css +0 -10
  69. package/ux/fonts/KFOkCnqEu92Fr1MmgVxIIzQ.5cb7edfc.woff +0 -0
  70. package/ux/fonts/KFOlCnqEu92Fr1MmEU9fBBc-.87284894.woff +0 -0
  71. package/ux/fonts/KFOlCnqEu92Fr1MmSU5fBBc-.b00849e0.woff +0 -0
  72. package/ux/fonts/KFOlCnqEu92Fr1MmWUlfBBc-.adcde98f.woff +0 -0
  73. package/ux/fonts/KFOlCnqEu92Fr1MmYUtfBBc-.bb1e4dc6.woff +0 -0
  74. package/ux/fonts/KFOmCnqEu92Fr1Mu4mxM.60fa3c06.woff +0 -0
  75. package/ux/fonts/fa-brands-400.c5e0f14f.woff +0 -0
  76. package/ux/fonts/fa-brands-400.cccc9d29.woff2 +0 -0
  77. package/ux/fonts/fa-regular-400.c4f508e7.woff +0 -0
  78. package/ux/fonts/fa-regular-400.f5f2566b.woff2 +0 -0
  79. package/ux/fonts/fa-solid-900.333bae20.woff +0 -0
  80. package/ux/fonts/fa-solid-900.44d537ab.woff2 +0 -0
  81. package/ux/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNa.29b882f0.woff +0 -0
  82. package/ux/fonts/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.0509ab09.woff2 +0 -0
  83. package/ux/js/app.0159ef6a.js +0 -1
  84. package/ux/js/chunk-2d0b90b4.92f1ea49.js +0 -8
  85. package/ux/js/chunk-461883cd.442efb25.js +0 -76
  86. package/ux/js/chunk-vendors.31d3ce30.js +0 -33
  87. /package/ux/js/{chunk-2d0de2f2.553bf976.js → chunk-2d0de2f2.2848649c.js} +0 -0
@@ -16,17 +16,10 @@ var server = null;
16
16
  // Express and middlewares
17
17
  var express = require('express');
18
18
  var expressBodyParser = require('body-parser');
19
- var expressFavicon = require('serve-favicon');
20
- var expressStatic = require('serve-static');
21
-
22
- var swaggerParser = require('swagger-parser');
23
19
 
24
20
  var swStats = require('../../lib'); // require('swagger-stats');
25
21
 
26
22
  var app = module.exports = express();
27
- app.use(expressFavicon(path.join(__dirname, '../../ui/favicon.png')));
28
- app.use('/ui',expressStatic(path.join(__dirname, '../../ui')));
29
- app.use('/node_modules',expressStatic(path.join(__dirname, '../../node_modules')));
30
23
  app.use(expressBodyParser.json());
31
24
  app.use(expressBodyParser.urlencoded({ extended: true }));
32
25
 
@@ -41,13 +34,15 @@ app.set('port', process.env.PORT || 3050);
41
34
  app.disable('etag');
42
35
 
43
36
  app.get('/', function(req,res) {
44
- res.redirect('/swagger-stats/ui');
37
+ res.redirect('/swagger-stats/');
45
38
  });
46
39
 
47
40
  // Return Prometheus metrics from prom-client
48
41
  app.get('/metrics', function(req,res) {
49
42
  res.status(200).set('Content-Type', 'text/plain');
50
- res.end(promClient.register.metrics());
43
+ Promise.resolve(promClient.register.metrics()).then( (x) => {
44
+ res.end(x);
45
+ });
51
46
  });
52
47
 
53
48
  var specLocation = path.join(__dirname, 'petstore.json');
@@ -64,7 +59,7 @@ var swaggerSpec = require( specLocation );
64
59
  // Use swagger-stats middleware with authentication enabled
65
60
  app.use(swStats.getMiddleware({
66
61
  name: 'swagger-stats-authtest',
67
- version: '0.95.17',
62
+ version: '0.99.7',
68
63
  hostname: "hostname",
69
64
  ip: "127.0.0.1",
70
65
  swaggerSpec:swaggerSpec,
@@ -12,7 +12,8 @@ const swaggerSpec = require('../spectest/petstore3.json');
12
12
  let server = null;
13
13
 
14
14
  fastify.get('/', function (request, reply) {
15
- reply.send({ hello: 'world' })
15
+ //reply.send({ hello: 'world' })
16
+ reply.redirect('/swagger-stats/');
16
17
  });
17
18
 
18
19
  fastify.get('/v2/paramstest/:code/and/:value', function (request, reply) {
@@ -46,15 +47,33 @@ fastify.route({
46
47
 
47
48
  let swsOptions = {
48
49
  name: 'swagger-stats-fastify',
49
- version: '0.95.17',
50
+ version: '0.99.7',
50
51
  timelineBucketDuration: 1000,
51
52
  swaggerSpec:swaggerSpec,
52
- elasticsearch: 'http://127.0.0.1:9200',
53
- elasticsearchIndexPrefix: 'swaggerstats-'
53
+ authentication: true,
54
+ sessionMaxAge: process.env.SWS_AUTHTEST_MAXAGE || 900,
55
+ onAuthenticate: function(req,username,password){
56
+ // simple check for username and password
57
+ if(username==='swagger-stats') {
58
+ return ((username === 'swagger-stats') && (password === 'swagger-stats'));
59
+ } else if(username==='swagger-promise'){
60
+ return new Promise(function(resolve) {
61
+ setTimeout(function(){
62
+ resolve((username === 'swagger-promise') && (password === 'swagger-promise'));
63
+ }, 1000);
64
+ });
65
+ }
66
+ return false;
67
+ }
68
+ //elasticsearch: 'http://127.0.0.1:9200',
69
+ //elasticsearchIndexPrefix: 'swaggerstats-'
54
70
  };
55
71
 
56
72
  // Enable swagger-stats
57
- fastify.register(swStats.getFastifyPlugin, swsOptions);
73
+ fastify.register(require('fastify-express')).then(()=>{
74
+ fastify.register(swStats.getFastifyPlugin, swsOptions);
75
+ });
76
+
58
77
 
59
78
  // Run the server!
60
79
  fastify.listen(3040, function (err, address) {
@@ -67,7 +67,7 @@ const init = async () => {
67
67
 
68
68
  let swsOptions = {
69
69
  name: 'swagger-stats-hapitest',
70
- version: '0.95.17',
70
+ version: '0.99.7',
71
71
  hostname: "hostname",
72
72
  ip: "127.0.0.1",
73
73
  uriPath: '/swagger-stats',
@@ -76,7 +76,22 @@ const init = async () => {
76
76
  durationBuckets: [10,100,1000],
77
77
  metricsPrefix: 'hapitest_',
78
78
  elasticsearch: 'http://127.0.0.1:9200',
79
- elasticsearchIndexPrefix: 'swaggerstats-'
79
+ elasticsearchIndexPrefix: 'swaggerstats-',
80
+ authentication: true,
81
+ sessionMaxAge: process.env.SWS_AUTHTEST_MAXAGE || 900,
82
+ onAuthenticate: function(req,username,password){
83
+ // simple check for username and password
84
+ if(username==='swagger-stats') {
85
+ return ((username === 'swagger-stats') && (password === 'swagger-stats'));
86
+ } else if(username==='swagger-promise'){
87
+ return new Promise(function(resolve) {
88
+ setTimeout(function(){
89
+ resolve((username === 'swagger-promise') && (password === 'swagger-promise'));
90
+ }, 1000);
91
+ });
92
+ }
93
+ return false;
94
+ }
80
95
  };
81
96
 
82
97
  // Enable Elasticsearch if specified
@@ -15,7 +15,7 @@ server.use(restify.plugins.queryParser());
15
15
  // Use swagger-stats middleware
16
16
  server.pre(swStats.getMiddleware({
17
17
  name: 'restifytest',
18
- version: '0.95.17',
18
+ version: '0.99.7',
19
19
  hostname: "hostname",
20
20
  ip: "127.0.0.1",
21
21
  timelineBucketDuration:1000,
@@ -30,6 +30,21 @@ server.pre(swStats.getMiddleware({
30
30
  elasticsearchIndexPrefix: 'swaggerstats-',
31
31
  onResponseFinish: function(req,res,rrr){
32
32
  debug('onResponseFinish: %s', JSON.stringify(rrr));
33
+ },
34
+ authentication: true,
35
+ sessionMaxAge: process.env.SWS_AUTHTEST_MAXAGE || 900,
36
+ onAuthenticate: function(req,username,password){
37
+ // simple check for username and password
38
+ if(username==='swagger-stats') {
39
+ return ((username === 'swagger-stats') && (password === 'swagger-stats'));
40
+ } else if(username==='swagger-promise'){
41
+ return new Promise(function(resolve) {
42
+ setTimeout(function(){
43
+ resolve((username === 'swagger-promise') && (password === 'swagger-promise'));
44
+ }, 1000);
45
+ });
46
+ }
47
+ return false;
33
48
  }
34
49
  }));
35
50
 
@@ -18,17 +18,12 @@ var server = null;
18
18
  // Express and middlewares
19
19
  var express = require('express');
20
20
  var expressBodyParser = require('body-parser');
21
- var expressFavicon = require('serve-favicon');
22
- var expressStatic = require('serve-static');
23
21
 
24
22
  var swaggerParser = require('swagger-parser');
25
23
 
26
24
  var swStats = require('../../lib'); // require('swagger-stats');
27
25
 
28
26
  var app = module.exports = express();
29
- app.use(expressFavicon(path.join(__dirname, '../../ui/favicon.png')));
30
- app.use('/ui',expressStatic(path.join(__dirname, '../../ui')));
31
- app.use('/node_modules',expressStatic(path.join(__dirname, '../../node_modules')));
32
27
  app.use(expressBodyParser.json());
33
28
  app.use(expressBodyParser.urlencoded({ extended: true }));
34
29
 
@@ -43,13 +38,15 @@ app.set('port', process.env.PORT || 3040);
43
38
  app.disable('etag');
44
39
 
45
40
  app.get('/', function(req,res) {
46
- res.redirect('/swagger-stats/ui');
41
+ res.redirect('/swagger-stats/');
47
42
  });
48
43
 
49
44
  // Return Prometheus metrics from prom-client
50
45
  app.get('/metrics', function(req,res) {
51
46
  res.status(200).set('Content-Type', 'text/plain');
52
- res.end(promClient.register.metrics());
47
+ Promise.resolve(promClient.register.metrics()).then( (x) => {
48
+ res.end(x);
49
+ });
53
50
  });
54
51
 
55
52
 
@@ -57,7 +54,8 @@ app.get('/metrics', function(req,res) {
57
54
  var swaggerSpec = null;
58
55
  var parser = new swaggerParser();
59
56
 
60
- var specLocation = 'petstore3.yaml';
57
+ //var specLocation = 'petstore3.yaml';
58
+ var specLocation = 'petstore.yaml';
61
59
 
62
60
  if( process.env.SWS_SPECTEST_URL ){
63
61
  specLocation = process.env.SWS_SPECTEST_URL;
@@ -78,7 +76,7 @@ parser.validate(specLocation,function(err, api) {
78
76
 
79
77
  var swsOptions = {
80
78
  name: 'swagger-stats-spectest',
81
- version: '0.95.17',
79
+ version: '0.99.7',
82
80
  hostname: "hostname",
83
81
  ip: "127.0.0.1",
84
82
  timelineBucketDuration: tlBucket,