Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

the memcached plugin now has it's own repo

  • Loading branch information...
commit 82864311ed5e8e2aa321e8f0e9c6c2ff534c1072 1 parent 0294504
Geoff Flarity authored
View
92 example_plugins/memcached_nervous/index.js
@@ -1,92 +0,0 @@
-//config
-var host = 'localhost';
-var port = 11211;
-var interval = 1000;
-
-var stats_to_gather =
- [
- 'get_misses', //number of get misses
- 'curr_connections', //current connections
- 'evictions', //number of evictions
- 'rusage_user', //seconds the cpu has devoted to the process as the user
- 'rusage_system', //econds the cpu has devoted to the process as the system
- 'decr_misses', //decr misses
- 'accepting_conns', //accepting connections true/false,
- 'pid', //the pid
- 'cmd_set', //the number of times cmd set called
- 'cmd_flush', //the number of times flush called
- 'delete_misses', //delete misses '0',
- 'cas_hits', //compare and swap hits
- 'incr_misses', //increment misses,
- 'cas_badval', //cass bad values
- //'conn_yields', //the number of connection yields
- 'get_hits', //number of get hits
- 'incr_hits', //number of incr hits
- 'delete_hits', //number of delete hits
- 'bytes_read', //bites read count
- 'bytes_written', //butes written count
- 'cas_misses', //cas misses
- 'total_connections', //cas misses
- 'bytes', //total number of bytes currently in use by curr_items
- 'total_items', //total number of items
- 'threads', //number of threads in use
- 'decr_hits', //number of decr hits
- 'cmd_get', //total GET commands issued to the server
- 'curr_items', //total number of items currently in memcache
- //'time', //current time
- //'version', //the version of memcache
- //'uptime', //the update for the process
- ];
-
-//deps
-var memcache = require('memcache');
-var utils = require('util');
-
-//code
-module.exports = function( axon ) {
-
- //this gets called every interval milliseconds
- var check_stats = function() {
-
- var client = new memcache.Client(port, host);
- client.connect();
- var on_connect = function () {
- client.stats( function( err, result ){
-
- if( err ) { axon.emit( 'error', err ) };
-
- //console.log( utils.inspect( result, true, null, true ) );
- for (var i = 0; i < stats_to_gather.length; i++) {
- var name = stats_to_gather[i];
- var value = result[name];
- var timestamp = result.time;
-
-
- axon.emit('data', name, value, timestamp);
- }
- //TODO reset and then close the client, the client doesn't support
- //reset, need to patch it first
- /*client.stats('reset', function(err) {
- console.log(err);
- client.close();
- });*/
- });
-
- };
- client.on( 'connect', on_connect );
-
- var on_error = function( error ) {
-
- axon.emit( 'error', error);
- };
- client.on( 'error', on_error );
-
-
- };
-
- //periodically send back stats
- setInterval( check_stats, interval );
-
-};
-
-
View
2  example_plugins/memcached_nervous/node_modules/memcache/.npmignore
@@ -1,2 +0,0 @@
-lib-cov
-*.swp
View
13 example_plugins/memcached_nervous/node_modules/memcache/Makefile
@@ -1,13 +0,0 @@
-NODE = node
-TEST = expresso
-TESTS ?= test/*.js
-
-test:
- @CONNECT_ENV=test $(TEST) \
- -I lib \
- $(TEST_FLAGS) $(TESTS)
-
-test-cov:
- @$(MAKE) test TEST_FLAGS="--cov"
-
-.PHONY: test test-cov
View
109 example_plugins/memcached_nervous/node_modules/memcache/README.md
@@ -1,109 +0,0 @@
-node.js memcached client
-========================
-
-A pure-JavaScript memcached library for node.
-
-
-Tests
------
-
-To run the test suite, first insall <a href="http://github.com/visionmedia/expresso">expresso</a>,
-then run <code>make test</code>.
-
-If you have <a href="http://github.com/visionmedia/node-jscoverage">node-jscoverage</a> you can
-also <code>make test-cov</code> for coverage, but that's pretty nerdy.
-
-
-Usage
------
-
-Create a Client object to start working.
-Host and port can be passed to the constructor or set afterwards.
-They have sensible defaults.
-
- var memcache = require('./memcache');
-
- var client = new memcache.Client(port, host);
- client.port = 11211;
- client.host = 'localhost';
-
-The Client object emits 4 important events - connect, close, timeout and error.
-
- client.on('connect', function(){
- // no arguments - we've connected
- });
-
- client.on('close', function(){
- // no arguments - connection has been closed
- });
-
- client.on('timeout', function(){
- // no arguments - socket timed out
- });
-
- client.on('error', function(e){
- // there was an error - exception is 1st argument
- });
-
- // connect to the memcache server after subscribing to some or all of these events
- client.connect()
-
-After connecting, you can start to make requests.
-
- client.get('key', function(error, result){
-
- // all of the callbacks have two arguments.
- // 'result' may contain things which aren't great, but
- // aren't really errors, like 'NOT_STORED'
-
- });
-
- client.set('key', 'value', function(error, result){
-
- // lifetime is optional. the default is
- // to never expire (0)
-
- }, lifetime);
-
- client.delete('key', function(error, result){
-
- // delete a key from cache.
- });
-
- client.version(function(error, result)){
-
- // grab the server version
- });
-
-
-There are all the commands you would expect.
-
- // all of the different "store" operations
- // (lifetime & flags are both optional)
- client.set(key, value, callback, lifetime, flags);
- client.add(key, value, callback, lifetime, flags);
- client.replace(key, value, callback, lifetime, flags);
- client.append(key, value, callback, lifetime, flags);
- client.prepend(key, value, callback, lifetime, flags);
- client.cas(key, value, unique, callback, lifetime, flags);
-
- // increment and decrement (named differently to the server commands - for now!)
- // (value is optional, defaults to 1)
- client.increment('key', value, callback);
- client.decrement('key', value, callback);
-
- // statistics. the success argument to the callback
- // is a key=>value object
- client.stats(callback);
- client.stats('settings', callback);
- client.stats('items', callback);
- client.stats('mongeese', callback);
-
-Once you're done, close the connection.
-
- client.close();
-
-There might be bugs. I'd like to know about them.
-
-I bet you also want to read the <a href="http://github.com/memcached/memcached/blob/master/doc/protocol.txt">memcached
-protocol doc</a>. It's exciting! It also explains possible error messages.
View
68 example_plugins/memcached_nervous/node_modules/memcache/example.js
@@ -1,68 +0,0 @@
-var util = require('util');
-var memcache = require('./lib/memcache');
-
-function microtime(get_as_float) {
- var now = new Date().getTime() / 1000;
- var s = parseInt(now);
- return (get_as_float) ? now : (Math.round((now - s) * 1000) / 1000) + ' ' + s;
-}
-
-var onConnect = function() {
- mcClient.get('test', function(err, data) {
- util.debug(data);
- mcClient.close();
- });
-};
-
-var benchmark = function() {
- var count = 20000;
- start = microtime(true);
- var x = 0;
-
- for (var i=0; i<=count; i++) {
- mcClient.get('test', function(err, data) {
- x += 1;
- if (x == count) {
- end = microtime(true);
- util.debug('total time: ' + (end - start));
- }
- });
- }
-
- mcClient.close();
-};
-
-var setKey = function() {
- mcClient.set('test', 'hello \r\n node-memcache', function(err, response) {
- mcClient.get('test', function(err, data) {
- util.debug(data);
- mcClient.close();
- });
- });
-};
-
-var version = function() {
- mcClient.version(function(err, version) {
- util.debug(version);
- mcClient.close();
- });
-};
-
-var incr = function() {
- mcClient.increment('x', 2, function(err, new_value) {
- util.debug(new_value);
- mcClient.close();
- });
-};
-
-var decr = function() {
- mcClient.decrement('x', 1, function(err, new_value) {
- util.debug(new_value);
- mcClient.close();
- });
-};
-
-mcClient = new memcache.Client();
-mcClient.connect();
-mcClient.addHandler(onConnect);
-
View
1  example_plugins/memcached_nervous/node_modules/memcache/index.js
@@ -1 +0,0 @@
-module.exports = require('./lib/memcache');
View
344 example_plugins/memcached_nervous/node_modules/memcache/lib/memcache.js
@@ -1,344 +0,0 @@
-/**
- * Copyright (c) 2011 Tim Eggert
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * @author Tim Eggert <tim@elbart.com>
- * @license http://www.opensource.org/licenses/mit-license.html MIT License
- */
-
-var tcp = require('net'),
- util = require('util');
-
-var crlf = "\r\n";
-var crlf_len = crlf.length;
-
-var error_replies = ['ERROR', 'NOT_FOUND', 'CLIENT_ERROR', 'SERVER_ERROR'];
-
-var Client = exports.Client = function(port, host) {
- this.port = port || 11211;
- this.host = host || 'localhost';
- this.buffer = '';
- this.conn = null;
- this.sends = 0;
- this.replies = 0;
- this.callbacks = [];
- this.handles = [];
-};
-
-util.inherits(Client, process.EventEmitter);
-
-Client.prototype.connect = function () {
- if (!this.conn) {
- this.conn = new tcp.createConnection(this.port, this.host);
- var self = this;
- this.conn.addListener("connect", function () {
- this.setTimeout(0); // try to stay connected.
- this.setNoDelay();
- self.emit("connect");
- self.dispatchHandles();
- });
-
- this.conn.addListener("data", function (data) {
- self.buffer += data;
- // util.debug(data);
- self.recieves += 1;
- self.handle_received_data();
- });
-
- this.conn.addListener("end", function () {
- if (self.conn && self.conn.readyState) {
- self.conn.end();
- self.conn = null;
- }
- });
-
- this.conn.addListener("close", function () {
- self.conn = null;
- self.emit("close");
- });
-
- this.conn.addListener("timeout", function () {
- self.conn = null;
- self.emit("timeout");
- });
-
- this.conn.addListener("error", function (ex) {
- self.conn = null;
- self.emit("error", ex);
- });
- }
-};
-
-Client.prototype.addHandler = function(callback) {
- this.handles.push(callback);
-
- if (this.conn.readyState == 'open') {
- this.dispatchHandles();
- }
-};
-
-Client.prototype.dispatchHandles = function() {
- for (var i in this.handles) {
- var handle = this.handles.shift();
- // util.debug('dispatching handle ' + handle);
- if (typeof handle !== 'undefined') {
- handle();
- }
- }
-};
-
-Client.prototype.query = function(query, type, callback) {
- this.callbacks.push({ type: type, fun: callback });
- this.sends++;
- this.conn.write(query + crlf);
-};
-
-Client.prototype.close = function() {
- if (this.conn && this.conn.readyState === "open") {
- this.conn.end();
- this.conn = null;
- }
-};
-
-Client.prototype.get = function(key, callback) {
- return this.query('get ' + key, 'get', callback);
-};
-
-
-// all of these store ops (everything bu "cas") have the same format
-Client.prototype.set = function(key, value, callback, lifetime, flags) { return this.store('set', key, value, callback, lifetime, flags); }
-Client.prototype.add = function(key, value, callback, lifetime, flags) { return this.store('add', key, value, callback, lifetime, flags); }
-Client.prototype.replace = function(key, value, callback, lifetime, flags) { return this.store('replace', key, value, callback, lifetime, flags); }
-Client.prototype.append = function(key, value, callback, lifetime, flags) { return this.store('append', key, value, callback, lifetime, flags); }
-Client.prototype.prepend = function(key, value, callback, lifetime, flags) { return this.store('prepend', key, value, callback, lifetime, flags); }
-Client.prototype.store = function(cmd, key, value, callback, lifetime, flags) {
-
- if (typeof(callback) != 'function') {
- lifetime = callback;
- callback = null;
- }
-
- var set_flags = flags || 0;
- var exp_time = lifetime || 0;
- var tml_buf = new Buffer(value.toString());
- var value_len = tml_buf.length || 0;
- var query = [cmd, key, set_flags, exp_time, value_len];
-
- return this.query(query.join(' ') + crlf + value, 'simple', callback);
-};
-
-// "cas" is a store op that takes an extra "unique" argument
-Client.prototype.cas = function(key, value, unique, callback, lifetime, flags) {
-
- if (typeof(callback) != 'function') {
- lifetime = callback;
- callback = null;
- }
-
- var set_flags = flags || 0;
- var exp_time = lifetime || 0;
- var value_len = value.length || 0;
- var query = ['cas', key, set_flags, exp_time, value_len, unique];
-
- return this.query(query.join(' ') + crlf + value, 'simple', callback);
-};
-
-
-Client.prototype.del = function(key, callback){
- util.error("mc.del() is deprecated - use mc.delete() instead");
- return this.delete(key, callback);
-};
-
-Client.prototype.delete = function(key, callback){
- return this.query('delete ' + key, 'simple', callback);
-};
-
-Client.prototype.version = function(callback) {
- return this.query('version', 'version', callback);
-};
-
-Client.prototype.increment = function(key, value, callback) {
-
- if (typeof(value) == 'function') {
- callback = value;
- value = 1;;
- }
-
- value = value || 1;
- return this.query('incr ' + key + ' ' + value, 'simple', callback);
-};
-
-Client.prototype.decrement = function(key, value, callback) {
-
- if (typeof(value) == 'function') {
- callback = value;
- value = 1;;
- }
-
- value = value || 1;
- return this.query('decr ' + key + ' ' + value, 'simple', callback);
-};
-
-Client.prototype.stats = function(type, callback){
-
- if (typeof(type) == 'function'){
- callback = type;
- type = null;
- }
-
- if (type){
- return this.query('stats '+type, 'stats', callback);
- }else{
- return this.query('stats', 'stats', callback);
- }
-}
-
-Client.prototype.handle_received_data = function(){
-
- while (this.buffer.length > 0){
-
- var result = this.determine_reply_handler(this.buffer);
-
- if (result == null){
- break;
- }
-
- var result_value = result[0];
- var next_result_at = result[1];
- var result_error = result[2];
-
- // does the current message need more data than we have?
- // (this is how "get" ops ensure we've gotten all the data)
- if (next_result_at > this.buffer.length){
- break;
- }
-
- this.buffer = this.buffer.substring(next_result_at);
-
- var callback = this.callbacks.shift();
- if (callback != null && callback.fun){
- this.replies++;
- callback.fun(result_error, result_value);
- }
- }
-};
-
-Client.prototype.determine_reply_handler = function (buffer){
-
- // check we have a whole line in the buffer
- var crlf_at = buffer.indexOf(crlf);
- if (crlf_at == -1){
- return null;
- }
-
- // determine errors
- for (var error_idx in error_replies){
- var error_indicator = error_replies[error_idx];
- if (buffer.indexOf(error_indicator) == 0) {
- return this.handle_error(buffer);
- }
- }
-
- // call the handler for the current message type
- var type = this.callbacks[0].type;
- if (type){
- return this['handle_' + type](buffer);
- }
-
- return null;
-};
-
-Client.prototype.handle_get = function(buffer) {
- var next_result_at = 0;
- var result_value = null;
- var end_indicator_len = 3;
- var result_len = 0;
-
- if (buffer.indexOf('END') == 0) {
- return [result_value, end_indicator_len + crlf_len];
- } else if (buffer.indexOf('VALUE') == 0 && buffer.indexOf('END') != -1) {
- first_line_len = buffer.indexOf(crlf) + crlf_len;
- var end_indicator_start = buffer.indexOf('END');
- result_len = end_indicator_start - first_line_len - crlf_len;
- result_value = buffer.substr(first_line_len, result_len);
- return [result_value, first_line_len + parseInt(result_len, 10) + crlf_len + end_indicator_len + crlf_len]
- } else {
- var first_line_len = buffer.indexOf(crlf) + crlf_len;
- var result_len = buffer.substr(0, first_line_len).split(' ')[3];
- result_value = buffer.substr(first_line_len, result_len);
-
- return [result_value, first_line_len + parseInt(result_len ) + crlf_len + end_indicator_len + crlf_len];
- }
-};
-
-Client.prototype.handle_stats = function(buffer){
-
- // special case - no stats at all
- if (buffer.indexOf('END') == 0){
- return [{}, 5];
- }
-
- // find the terminator
- var idx = buffer.indexOf('\r\nEND\r\n');
- if (idx == -1){
- // wait for more data if we don't have an end yet
- return null;
- }
-
- // read the lines
- var our_data = buffer.substr(0, idx+2);
- var out = {};
- var line = null;
- var i=0;
- while (line = readLine(our_data)){
- our_data = our_data.substr(line.length + 2);
- if (line.substr(0, 5) == 'STAT '){
- var idx2 = line.indexOf(' ', 5);
- var k = line.substr(5, idx2-5);
- var v = line.substr(idx2+1);
- out[k] = v;
- }
- }
-
- return [out, idx + 7, null];
-};
-
-Client.prototype.handle_simple = function(buffer){
- var line = readLine(buffer);
- return [line, (line.length + crlf_len), null];
-};
-
-Client.prototype.handle_version = function(buffer){
- var line_len = buffer.indexOf(crlf);
- var indicator_len = 'VERSION '.length;
- var result_value = buffer.substr(indicator_len, (line_len - indicator_len));
- return [result_value, line_len + crlf_len, null];
-};
-
-Client.prototype.handle_error = function(buffer){
- line = readLine(buffer);
- return [null, (line.length + crlf_len), line];
-};
-
-readLine = function(string){
- var line_len = string.indexOf(crlf);
- return string.substr(0, line_len);
-};
-
View
24 example_plugins/memcached_nervous/node_modules/memcache/package.json
@@ -1,24 +0,0 @@
-{
- "name": "memcache",
- "description": "simple memcache client",
- "version": "0.3.0",
- "homepage": "https://github.com/elbart/node-memcache",
- "repository": "git://github.com/elbart/node-memcache.git",
- "author": "Tim Eggert <tim@elbart.com>",
- "main": "./lib/memcache",
- "devDependencies": {
- "expresso": ">=0.7.0"
- },
- "directories": {
- "lib": "lib",
- "test": "test"
- },
- "scripts": {
- "test": "make test",
- "test-cov": "make test-cov"
- },
- "engines": {
- "node": ">=0.6.0"
- },
- "keywords": [ "memcache", "memcached" ]
-}
View
238 example_plugins/memcached_nervous/node_modules/memcache/test/test-memcache.js
@@ -1,238 +0,0 @@
-/*
-tests for expresso
-*/
-
-var util = require('util'),
- memcache = require('memcache'),
- assert = require('assert'),
- port = 11211;
-
-mc = new memcache.Client(port);
-mc.on('error', function(e){
-
- if (e.errno == 111){
- exports['startup test'] = function(){
-
- assert.ok(false, "You need to have a memcache server running on localhost:11211 for these tests to run");
- }
- return;
- }
-
- exports['startup test'] = function(){
- assert.ok(false, "Unexpected error during connection: "+util.inspect(e));
- }
-});
-mc.connect();
-
-
-mc.addHandler(function() {
-
- // test nonexistent key is null
- exports['test null value'] = function(beforeExit) {
- var n = 0;
- mc.get('no such key', function(err, r) {
- assert.equal(null, r);
- n++;
- });
-
- beforeExit(function() {
- assert.equal(1, n);
- });
- };
-
- // test set, get and expires
- exports['test set, get, and expires'] = function(beforeExit) {
- var n = 0;
- // set key
- mc.set('set1', 'asdf1', function() {
- n++;
- mc.get('set1', function(err, r) {
- // assert key is found
- assert.equal('asdf1', r);
- n++;
- // assert key expires after 1s
- setTimeout(function() {
- mc.get('set1', function(r) {
- mc.close();
- assert.equal(null, r);
- n++;
- });
- }, 1000);
- });
- }, 1);
-
- beforeExit(function() {
- assert.equal(3, n);
- });
- };
-
- exports['test set get with integer value'] = function(beforeExit) {
- mc.set('testKey', 123, function() {
- mc.get('testKey', function(err, r) {
- assert.equal(123,r);
- });
- });
- };
-
- // test set and delete
- exports['test set del'] = function(beforeExit) {
- var n = 0;
- // set key
- mc.set('set2', 'asdf2', function() {
- n++;
- mc.get('set2', function(err, r) {
- // assert key is found
- assert.equal('asdf2', r);
- n++;
- // delete key
- mc.delete('set2', function() {
- mc.get('set2', function(err, r) {
- // assert key is null
- assert.equal(null, r);
- n++;
- });
- });
- });
- }, 0);
-
- beforeExit(function() {
- assert.equal(3, n);
- });
- };
-
- // test utf8 handling
- exports['utf8'] = function(beforeExit) {
- mc.set('key1', 'привет', function() {
- mc.get('key1', function(err, r) {
- assert.equal('привет', r);
- });
- });
- };
-
-
- // test connecting and disconnecting
- exports['con disco'] = function(beforeExit) {
-
- var n = 0;
-
- var mc2 = new memcache.Client(port);
- mc2.on('connect', function(){
- n++;
- mc2.close();
- });
- mc2.on('close', function(){
- n++;
- });
-
- mc2.connect();
-
- beforeExit(function() {
- assert.equal(2, n);
- });
- };
-
- // increment / decrement
- exports['inc dec'] = function(beforeExit){
-
- var n = 0;
-
- mc.set('inc_bad', 'HELLO', function(err, response){
- assert.equal(response, 'STORED');
- n++;
- mc.increment('inc_bad', 2, function(err, ok){
- n++;
- assert.match(err, /^CLIENT_ERROR/);
- assert.equal(ok, null);
- });
- mc.decrement('inc_bad', 3, function(err, ok){
- n++;
- assert.match(err, /^CLIENT_ERROR/);
- assert.equal(ok, null);
- });
- mc.increment('inc_bad', null, function(err, ok){
- n++;
- assert.match(err, /^CLIENT_ERROR/);
- assert.equal(ok, null);
- });
- mc.decrement('inc_bad', null, function(err, ok){
- n++;
- assert.match(err, /^CLIENT_ERROR/);
- assert.equal(ok, null);
- });
- });
-
- mc.set('inc_good', '5', function(err, response){
- assert.equal(response, 'STORED');
- n++;
- mc.increment('inc_good', 2, function(err, response){
- n++;
- assert.equal(response, 7);
- mc.increment('inc_good', function(err, response){
- n++;
- assert.equal(response, 8);
- mc.decrement('inc_good', function(err, response){
- n++;
- assert.equal(response, 7);
- mc.decrement('inc_good', 4, function(err, response){
- n++;
- assert.equal(response, 3);
- });
- });
- });
- });
- });
-
- beforeExit(function(){
- assert.equal(10, n);
- });
-
- };
-
- exports['version'] = function(beforeExit){
- var n = 0;
-
- mc.version(function(error, success){
- n++;
- assert.equal(error, null);
- assert.length(success, 5);
- });
-
- beforeExit(function(){
- assert.equal(1, n);
- });
- };
-
- exports['stats'] = function(beforeExit){
- var n = 0;
-
- mc.stats(function(error, success){
- n++;
- assert.ok(success.pid, "server has a pid");
- });
-
- mc.stats('settings', function(error, success){
- n++;
- assert.ok(success.maxconns);
- });
-
- mc.stats('items', function(error, success){ n++; assert.ok(num_keys(success)); });
- mc.stats('sizes', function(error, success){ n++; assert.ok(num_keys(success)); });
- mc.stats('slabs', function(error, success){ n++; assert.ok(num_keys(success)); });
-
- mc.stats('notreal', function(error, success){
- n++;
- assert.equal(error, 'ERROR');
- });
-
- beforeExit(function(){
- assert.equal(6, n);
- });
- };
-
-});
-
-function num_keys(a){
- var i=0;
- for (var k in a) i++;
- return i;
-}
View
33 example_plugins/memcached_nervous/package.json
@@ -1,33 +0,0 @@
-{
- "name": "nervous_plugin_memcached",
- "preferGlobal": false,
- "version": "0.1.0",
- "author": "Geoff Flarity <geoff.flarity@gmail.com>",
- "description": "a simple memcached stats plugin for Nervous",
- "contributors": [
- {
- "name": "Geoff Flarity",
- "email": "geoff.flarity@gmail.com"
- }
- ],
- "main": "./index.js",
- "keywords": [
- "nervous",
- "monitoring",
- "plugable",
- "plugin",
- "memcached',
- 'memcache'
- ],
- "dependencies" : {
- },
- "noAnalyze": true,
- "devDependencies": {
- },
- "bundleDependencies": [
- ],
- "license": "MIT",
- "engine": {
- "node": ">=0.6"
- }
-}
Please sign in to comment.
Something went wrong with that request. Please try again.