New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

hapromo

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hapromo - npm Package Compare versions

Comparing version 0.1.0 to 0.1.1

.travis.yml

145

lib/hapromo.js

@@ -13,7 +13,28 @@ /**

/*
* Haproxy check_status values
UNK -> unknown
INI -> initializing
SOCKERR -> socket error
L4OK -> check passed on layer 4, no upper layers testing enabled
L4TMOUT -> layer 1-4 timeout
L4CON -> layer 1-4 connection problem, for example "Connection refused" (tcp rst) or "No route to host" (icmp)
L6OK -> check passed on layer 6
L6TOUT -> layer 6 (SSL) timeout
L6RSP -> layer 6 invalid response - protocol error
L7OK -> check passed on layer 7
L7OKC -> check conditionally passed on layer 7, for example 404 with disable-on-404
L7TOUT -> layer 7 (HTTP/SMTP) timeout
L7RSP -> layer 7 invalid response - protocol error
L7STS -> layer 7 response error, for example HTTP 5xx
*/
/*
*
* Lifecycle:
*
* Every <interval> seconds: Fetch statistics data (csv) Run filters Handle
* filter results
* Every <interval> seconds:
* Fetch statistics data (csv)
* Run filters
* Handle filter callbacks/Emit events
*

@@ -27,6 +48,9 @@ */

// Name of main frontend - for detecting proxy instance reloads
this.mainFrontendName = typeof this.conf.frontend !== 'undefined' ? this.conf.frontend : null;
// Keep track of stot - for detecting proxy instance reloads
this.totalSessions = 0;
this.quiet = true;
this.quiet = typeof this.conf.quiet !== 'undefined' ? this.conf.quiet : true;

@@ -38,3 +62,3 @@ // Event conditions

{ header : 'svname', op : 'ne', value : 'FRONTEND' },
{ header : 'check_status', op : 'eq', value : 'L4OK' }
{ header : 'check_status', op : 'in', value : ['L4OK','L6OK','L7OK','L7OKC','INI'] }
], event : 'server_ok' },

@@ -44,3 +68,3 @@ { criteria : [

{ header : 'svname', op : 'ne', value : 'FRONTEND' },
{ header : 'check_status', op : 'ne', value : 'L4OK' }
{ header : 'check_status', op : 'in', value : ['UNK','SOCKERR','L4TMOUT','L4CON','L6TOUT','L6RSP','L7TOUT','L7RSP','L7STS'] },
], event : 'server_down' },

@@ -166,46 +190,17 @@ { criteria : [

// Iterate through all filters
for(var f in this.filters) {
var filter = this.filters[f];
var passed = true;
this.log('Applying filter: %s', filter.event);
// ... and each criteria in filter
for(var c in filter.criteria) {
var criteria = filter.criteria[c];
var header = criteria.header;
var value = typeof(criteria.value) == 'function' ? criteria.value.call(this, row) : criteria.value;
this.log('\tCriteria: %s %s %s', header, criteria.op, value);
this.log('\tData: %s %s %s', row[header], criteria.op, value);
// Do compare operation
switch(criteria.op) {
case 'lt' : passed = row[header] < value; break;
case 'lte' : passed = row[header] <= value; break;
case 'eq' : passed = row[header] === value; break;
case 'ne' : passed = row[header] !== value; break;
case 'gt' : passed = row[header] > value; break;
case 'gte' : passed = row[header] >= value; break;
default : passed = false; break;
}
this.log('\tPassed: %s', passed);
// Drop out of loop, if any condition fails
if(false == passed)
break;
}
// Notify listeners
if(passed) {
if(null != filter.event)
this.emit(filter.event, row);
if(null != filter.handler && typeof filter.handler == 'function')
filter.handler.call(this, row);
}
}
var passedFilters = this.applyFilters(row);
// Notify listeners
var self = this;
passedFilters.forEach(function(filter) {
if(null != filter.event)
self.emit(filter.event, row);
if(null != filter.handler && typeof filter.handler == 'function')
filter.handler.call(this, row);
});
}
// Update total sessions
this.totalSessions = parsedStats.map['http-in']['FRONTEND']['stot'];
if(null !== this.mainFrontendName)
this.totalSessions = parsedStats.map[this.mainFrontendName]['FRONTEND']['stot'];

@@ -221,6 +216,60 @@ // Emit update event

Hapromo.prototype.log = function(msg, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {
Hapromo.prototype.applyFilters = function(input) {
var passedFilters = [];
// Iterate through all filters, checking if they pass
for(var f in this.filters) {
var filter = this.filters[f];
this.log('Applying filter: %s', typeof filter.event !== 'undefined' ? filter.event : "Callback filter");
var passed = this.applyFilter(filter, input);
// Add filter to filters passed if that is the case
if(passed)
passedFilters.push(filter);
}
return passedFilters;
};
Hapromo.prototype.applyFilter = function(filter, input) {
this.log('Applying filter: %s', filter.event);
// Check each criteria for whether it holds or not
for(var c in filter.criteria) {
var passed = true;
var criteria = filter.criteria[c];
var header = criteria.header;
var value = typeof(criteria.value) == 'function' ? criteria.value.call(this, input) : criteria.value;
this.log('\tCriteria: %s %s %s', header, criteria.op, value);
this.log('\tData: %s %s %s', input[header], criteria.op, value);
// Do compare operation
switch(criteria.op) {
case 'lt' : passed = input[header] < value; break;
case 'lte' : passed = input[header] <= value; break;
case 'eq' : passed = input[header] === value; break;
case 'ne' : passed = input[header] !== value; break;
case 'in' : passed = value.indexOf(input[header]) !== -1; break;
case 'nin' : passed = value.indexOf(input[header]) === -1; break;
case 'gt' : passed = input[header] > value; break;
case 'gte' : passed = input[header] >= value; break;
default : passed = false; break;
}
this.log('\tPassed: %s', passed);
// Drop out of loop if any condition fails
if(false == passed)
return false;
}
return filter;
};
Hapromo.prototype.log = function() {
if(!this.quiet)
console.log(msg, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
console.log.apply(this, arguments);
};
{
"name": "hapromo",
"description": "Haproxy Monitor library",
"version": "0.1.0",
"version": "0.1.1",
"author": "Frederik Hannibal <frederik@backhand.dk>",

@@ -9,8 +9,11 @@ "repository": "git://github.com/backhand/hapromo",

"dependencies": {
"request": "2.12.0"
"request": ">=2.12.0"
},
"devDependencies": {
"nodeunit": ">=0.7.4"
},
"scripts": {
"test": "nodeunit test"
"test": "node_modules/nodeunit/bin/nodeunit test"
},
"engines": { "node": ">= 0.6.2" }
}
"engines": { "node": ">=0.6.2" }
}
HAProxy monitor library
=======================
[![Build Status](https://secure.travis-ci.org/backhand/hapromo.png?branch=master)](https://travis-ci.org/backhand/hapromo)
Usage:

@@ -5,0 +7,0 @@ ------

@@ -15,4 +15,6 @@ var fs = require('fs');

var parsedReply = hapromo.parseStats(testReply);
exports.testParsing = function(test) {
var parsedReply = hapromo.parseStats(testReply);
//var parsedReply = hapromo.parseStats(testReply);
test.equal(parsedReply.map['blog-servers']['blog2'].qcur,0);

@@ -68,2 +70,40 @@ test.equal(parsedReply.map['http-in']['FRONTEND'].qmax,'');

test.done();
};
exports.testFilterOperatorIN = function(test) {
var testfilter = {
criteria : [
{ header : 'svname', op : 'ne', value : 'FRONTEND' },
{ header : 'svname', op : 'ne', value : 'BACKEND' },
{ header : 'check_status', op : 'in', value : ['L4OK','L7OK'] }
]
};
var row = parsedReply.map['http-servers']['webapp2'];
var result = hapromo.applyFilter(testfilter, row);
test.equal(testfilter, result);
test.done();
};
exports.testFilterOperatorNIN = function(test) {
var testfilter = {
criteria : [
{ header : 'svname', op : 'ne', value : 'FRONTEND' },
{ header : 'svname', op : 'ne', value : 'BACKEND' },
{ header : 'check_status', op : 'nin', value : ['L4OK','L7OK'] }
]
};
var row = parsedReply.map['http-servers']['webapp2'];
var result = hapromo.applyFilter(testfilter, row);
test.deepEqual(false, result);
test.done();
};
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc