0.7.4 • Published 5 years ago

larvitamsync v0.7.4

Weekly downloads
1
License
ISC
Repository
github
Last release
5 years ago

Build Status Dependencies

larvitamsync

Sync data between minions

Usage

Server (data master)

Simple command

const	Intercom	= require('larvitamintercom'),
	winston	= require('winston'),
	options	= {'exchange': 'test_dataDump'}, // RabbitMQ exchange, must be unique on the queue
	amsync	= require('larvitamsync'),
	log	= winston.createLogger({'transports': [new winston.transports.Console()]});

options.intercom	= new Intercom({'conStr': 'AMQP connection string', 'log': log});

// Set the log instance for the amsync server
// This is optional, but recommended
options.log	= log;

// The stdout from this command will be piped to the data slave
// This will be be the input for the
// https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
options.dataDumpCmd = {
	'command':	'cat',
	'args':	['/home/myself/dbdump.sql'],
	'options':	{}
};
// or pipe directly from mysqldump:
options.dataDumpCmd = {
	'command':	'mysqldump',
	'args':	['-u', 'root', '-psecret', '--single-transaction', 'dbname', 'table1', 'table2'],
	'options':	{}
};

// You can set range of network ports to be used.
// By not declaring port range a random free port will be used.
options.minPort	= 5000;
options.maxPort	= 5100;

new amsync.SyncServer(options, function(err) {
	if (err) throw err;
	console.log('Server active');
});

Custom http request handler

On each data dump request there is a http request and this can be handled manually

const	winston	= require('winston'),
	Intercom	= require('larvitamintercom'),
	options	= {'exchange': 'test_dataDump'}, // RabbitMQ exchange, must be unique on the queue
	amsync	= require('larvitamsync'),
	log	= winston.createLogger({'transports': [new winston.transports.Console()]});

let	syncServer;

options.intercom	= new Intercom({'conStr': 'AMQP connection string', 'log': log});
options.log	= log;

syncServer = new amsync.SyncServer(options, function(err) {
	if (err) throw err;

	console.log('Server active');
});

syncServer.handleHttpReq_original = syncServer.handleHttpReq;

syncServer.handleHttpReq = function(req, res) {

	// Set custom content type
	res.setHeader('Content-Type', 'text/plain');

	// Run different commands depending on request url
	if (req.url === '/') {
		syncServer.options.dataDumpCmd = {'command': 'echo', 'args': ['blergh']};
	} else {
		syncServer.options.dataDumpCmd = {'command': 'echo', 'args': [req.url]};
	}

	// Run the original request handler
	syncServer.handleHttpReq_original(req, res);
}

Client (data slave)

For this to work, larvitamintercom must be configured and up and running!

const	Intercom	= require('larvitamintercom'),
	options	= {},
	amsync	= require('larvitamsync');

options.intercom	= new Intercom('AMQP connection string');
options.exchange	= 'test_dataDump';	// RabbitMQ exchange, must be unique on the queue
options.requestOptions	= {'path': '/foobar'};	// Optional extra options to
		// https://www.npmjs.com/package/request that
		// is used to request stuff from the server

new amsync.SyncClient(options, function(err, res) {
	let	syncData	= Buffer.from('');

	if (err) throw err;

	// res is an instance of https://nodejs.org/api/http.html#http_class_http_incomingmessage

	res.on('data', function(chunk) {
		syncData	=	Buffer.concat([syncData, chunk], syncData.length + chunk.length);
	});

	res.on('end', function() {
		console.log('Got sync data:');
		console.log(syncData.toString());
	});

	res.on('error', function(err) {
		throw err;
	});
});

MariaDB/MySQL

For this to work, both larvitamintercom and larvitdb must be configured and up and running!

const	winston	= require('winston'),
	Intercom	= require('larvitamintercom'),
	options	= {'exchange': 'test_dataDump'}, // RabbitMQ exchange, must be unique on the queue
	amsync	= require('larvitamsync'),
	log	= winston.createLogger({'transports': [new winston.transports.Console()]}),
	db	= require('larvitdb');

// See how to configure larvitdb here: https://github.com/larvit/larvitdb#larvitdb
db.setup(someConfig);

options.intercom	= new Intercom('AMQP connection string');
options.log	= log;
options.db	= db;

amsync.mariadb(options, function(err) {
	if (err) throw err;
	console.log('Data synced!');
});
0.7.4

5 years ago

0.7.3

5 years ago

0.7.2

6 years ago

0.7.1

6 years ago

0.7.0

6 years ago

0.6.0

6 years ago

0.5.7

6 years ago

0.5.6

6 years ago

0.5.5

6 years ago

0.5.4

6 years ago

0.5.3

6 years ago

0.5.2

7 years ago

0.5.1

7 years ago

0.5.0

7 years ago

0.4.0

7 years ago

0.3.2

7 years ago

0.3.0

7 years ago

0.2.1

7 years ago

0.2.0

7 years ago

0.1.10

7 years ago

0.1.9

7 years ago

0.1.8

7 years ago

0.1.7

7 years ago

0.1.5

7 years ago

0.1.4

7 years ago

0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago

0.0.1

7 years ago