Commit b30a7134bbb2a55afb3cd078c30968afdf773423
1 parent
388f5560
Exists in
master
and in
1 other branch
adiciona suporte a queue
Showing
10 changed files
with
170 additions
and
126 deletions
Show diff stats
endpoints/ios.js
1 | var parameters = require('../helpers/parameters'); | 1 | var parameters = require('../helpers/parameters'); |
2 | var properties = require('../helpers/properties'); | 2 | var properties = require('../helpers/properties'); |
3 | - | 3 | +var queue_helper = require('../helpers/queue'); |
4 | var exec = require('child_process').exec, child; | 4 | var exec = require('child_process').exec, child; |
5 | var uuid = require('node-uuid'); | 5 | var uuid = require('node-uuid'); |
6 | var fs = require('fs'); | 6 | var fs = require('fs'); |
7 | +var kue = require('kue'), | ||
8 | + queue = kue.createQueue(); | ||
7 | 9 | ||
8 | function init(req, res) { | 10 | function init(req, res) { |
9 | 11 | ||
@@ -22,25 +24,37 @@ function init(req, res) { | @@ -22,25 +24,37 @@ function init(req, res) { | ||
22 | } | 24 | } |
23 | 25 | ||
24 | /* Cria a linha de comando */ | 26 | /* Cria a linha de comando */ |
25 | - var command_line = 'echo ' + req.body.texto + ' >> text_files/' + id + ' && mkdir uploads/' + id + ' && vlibras_user/vlibras-core/./vlibras ' + parameters.getServiceType(req.body.servico) + ' text_files/' + | 27 | + var command_line = 'echo ' + req.body.texto + ' >> text_files/' + id + ' && mkdir uploads/' + id + ' && vlibras_user/vlibras-core/./vlibras ' + parameters.getServiceType(req.body.servico) + ' text_files/' + |
26 | id + ' ' + parameters.getTransparency(req.body.transparencia) + ' ' + id + ' IOS > /tmp/core_log 2>&1'; | 28 | id + ' ' + parameters.getTransparency(req.body.transparencia) + ' ' + id + ' IOS > /tmp/core_log 2>&1'; |
27 | 29 | ||
28 | - console.log(command_line) | 30 | + console.log(command_line); |
29 | 31 | ||
30 | /* Executa a linha de comando */ | 32 | /* Executa a linha de comando */ |
31 | - child = exec(command_line, function(err, stdout, stderr) { | ||
32 | - // [stdout] = vlibras-core output | 33 | + // child = exec(command_line, function(err, stdout, stderr) { |
34 | + // // [stdout] = vlibras-core output | ||
35 | + // }); | ||
36 | + | ||
37 | + var child; | ||
38 | + var job = queue.create('exec_command_line', { | ||
39 | + title: 'Command Line for: ' + req.body.servico, | ||
40 | + command_line: command_line | ||
41 | + }).save(); | ||
42 | + | ||
43 | + queue.process('exec_command_line', function(job, done){ | ||
44 | + child = queue_helper.exec_command_line(job.data.command_line, done); | ||
33 | }); | 45 | }); |
34 | 46 | ||
35 | - /* Listener que dispara quando a requisição ao core finaliza */ | ||
36 | - child.on('close', function(code, signal){ | ||
37 | - res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.mp4' }); | ||
38 | - }); | 47 | + job.on('complete', function() { |
48 | + /* Listener que dispara quando a requisição ao core finaliza */ | ||
49 | + child.on('close', function(code, signal){ | ||
50 | + res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.mp4' }); | ||
51 | + }); | ||
39 | 52 | ||
40 | - /* Listener que dispara quando a requisição ao core da erro */ | ||
41 | - child.on('error', function(code, signal){ | ||
42 | - res.send(500, parameters.errorMessage('Erro na chamada ao core')); | 53 | + /* Listener que dispara quando a requisição ao core da erro */ |
54 | + child.on('error', function(code, signal){ | ||
55 | + res.send(500, parameters.errorMessage('Erro na chamada ao core')); | ||
56 | + }); | ||
43 | }); | 57 | }); |
44 | -}; | 58 | +} |
45 | 59 | ||
46 | module.exports.init = init; | 60 | module.exports.init = init; |
endpoints/legenda.js
1 | var parameters = require('../helpers/parameters'); | 1 | var parameters = require('../helpers/parameters'); |
2 | var properties = require('../helpers/properties'); | 2 | var properties = require('../helpers/properties'); |
3 | - | 3 | +var queue_helper = require('../helpers/queue'); |
4 | var exec = require('child_process').exec, child; | 4 | var exec = require('child_process').exec, child; |
5 | var uuid = require('node-uuid'); | 5 | var uuid = require('node-uuid'); |
6 | var fs = require('fs'); | 6 | var fs = require('fs'); |
7 | +var kue = require('kue'), | ||
8 | + queue = kue.createQueue(); | ||
7 | 9 | ||
8 | function init(req, res) { | 10 | function init(req, res) { |
9 | 11 | ||
@@ -42,21 +44,33 @@ function init(req, res) { | @@ -42,21 +44,33 @@ function init(req, res) { | ||
42 | req.files.legenda.name + ' ' + parameters.getTransparency(req.body.transparencia) + ' ' + id; | 44 | req.files.legenda.name + ' ' + parameters.getTransparency(req.body.transparencia) + ' ' + id; |
43 | 45 | ||
44 | /* Executa a linha de comando */ | 46 | /* Executa a linha de comando */ |
45 | - child = exec(command_line, function(err, stdout, stderr) { | ||
46 | - // [stdout] = vlibras-core output | ||
47 | - // console.log(stdout); | ||
48 | - }); | 47 | + // child = exec(command_line, function(err, stdout, stderr) { |
48 | + // // [stdout] = vlibras-core output | ||
49 | + // // console.log(stdout); | ||
50 | + // }); | ||
49 | 51 | ||
50 | - /* Listener que dispara quando a requisição ao core finaliza */ | ||
51 | - child.on('close', function(code, signal){ | ||
52 | - res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.flv' }); | ||
53 | - }); | 52 | + var job = queue.create('exec_command_line', { |
53 | + title: 'Command Line for: ' + req.body.servico, | ||
54 | + command_line: command_line | ||
55 | + }).save(); | ||
54 | 56 | ||
55 | - /* Listener que dispara quando a requisição ao core da erro */ | ||
56 | - child.on('error', function(code, signal){ | ||
57 | - res.send(500, parameters.errorMessage('Erro na chamada ao core')); | 57 | + queue.process('exec_command_line', function(job, done){ |
58 | + child = queue_helper.exec_command_line(job.data.command_line, done); | ||
58 | }); | 59 | }); |
60 | + | ||
61 | + job.on('complete', function() { | ||
62 | + /* Listener que dispara quando a requisição ao core finaliza */ | ||
63 | + child.on('close', function(code, signal){ | ||
64 | + res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.flv' }); | ||
65 | + }); | ||
66 | + | ||
67 | + /* Listener que dispara quando a requisição ao core da erro */ | ||
68 | + child.on('error', function(code, signal){ | ||
69 | + res.send(500, parameters.errorMessage('Erro na chamada ao core')); | ||
70 | + }); | ||
71 | + }) | ||
72 | + | ||
59 | }); | 73 | }); |
60 | }; | 74 | }; |
61 | 75 | ||
62 | -module.exports.init = init; | ||
63 | \ No newline at end of file | 76 | \ No newline at end of file |
77 | +module.exports.init = init; |
endpoints/texto.js
@@ -34,7 +34,8 @@ function init(req, res, Request) { | @@ -34,7 +34,8 @@ function init(req, res, Request) { | ||
34 | 34 | ||
35 | db.create(request_object, function(result) { | 35 | db.create(request_object, function(result) { |
36 | if (result !== null) { | 36 | if (result !== null) { |
37 | - res.send(200, { 'status': 'Requisição ' + result.id + ' cadastrada com sucesso.'}); | 37 | + // TODO retornar ID do video |
38 | + res.send(200, { 'status': 'Requisição ' + result.id + ' cadastrada com sucesso.', 'video_id': result.id}); | ||
38 | } else { | 39 | } else { |
39 | res.send(500, { 'error': 'Erro na criação da requisição.'}); | 40 | res.send(500, { 'error': 'Erro na criação da requisição.'}); |
40 | } | 41 | } |
@@ -42,55 +43,36 @@ function init(req, res, Request) { | @@ -42,55 +43,36 @@ function init(req, res, Request) { | ||
42 | 43 | ||
43 | /* Cria a linha de comando */ | 44 | /* Cria a linha de comando */ |
44 | var command_line = 'echo ' + req.body.texto + ' >> text_files/' + id + ' && mkdir uploads/' + id + ' && vlibras_user/vlibras-core/./vlibras ' + parameters.getServiceType(req.body.servico) + ' text_files/' + | 45 | var command_line = 'echo ' + req.body.texto + ' >> text_files/' + id + ' && mkdir uploads/' + id + ' && vlibras_user/vlibras-core/./vlibras ' + parameters.getServiceType(req.body.servico) + ' text_files/' + |
45 | - id + ' ' + parameters.getTransparency(req.body.transparencia) + ' ' + id + ' WEB > /tmp/core_log 2>&1'; | ||
46 | - | ||
47 | -console.log(command_line); | 46 | + id + ' ' + parameters.getTransparency(req.body.transparencia) + ' ' + id + ' Web > /tmp/core_log 2>&1'; |
48 | 47 | ||
48 | + console.log(command_line); | ||
49 | + var child; | ||
49 | var job = queue.create('exec_command_line', { | 50 | var job = queue.create('exec_command_line', { |
50 | title: 'Command Line for: ' + req.body.servico, | 51 | title: 'Command Line for: ' + req.body.servico, |
51 | command_line: command_line | 52 | command_line: command_line |
52 | }).save(); | 53 | }).save(); |
53 | 54 | ||
54 | - | ||
55 | - /* Executa a linha de comando */ | ||
56 | - // child = exec(command_line, function(err, stdout, stderr) { | ||
57 | - // // [stdout] = vlibras-core output | ||
58 | - // }); | ||
59 | - | ||
60 | - | ||
61 | - // vai remover isso em cima e colocar isso aqui | ||
62 | queue.process('exec_command_line', function(job, done){ | 55 | queue.process('exec_command_line', function(job, done){ |
63 | - queue_helper.exec_command_line(job.data.command_line, done); | 56 | + child = queue_helper.exec_command_line(job.data.command_line, done); |
64 | }); | 57 | }); |
65 | 58 | ||
66 | - job.on('complete', function(){ | ||
67 | - console.log("Job complete"); | 59 | + job.on('complete', function() { |
60 | + /* Listener que dispara quando a requisição ao core finaliza */ | ||
61 | + child.on('close', function(code, signal) { | ||
62 | + // res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.webm' }); | ||
68 | db.update(request_object, 'Completed', function(result) { | 63 | db.update(request_object, 'Completed', function(result) { |
69 | - }); | 64 | + }); |
65 | + }); | ||
70 | 66 | ||
71 | - }).on('failed', function(){ | ||
72 | - console.log("Job failed"); | ||
73 | - res.send(500, parameters.errorMessage('Erro na chamada ao core')); | ||
74 | - db.update(request_object, 'Error', function(result) { | ||
75 | - }); | ||
76 | - }).on('progress', function(progress){ | ||
77 | - process.stdout.write('\r job #' + job.id + ' ' + progress + '% complete'); | ||
78 | - }); | 67 | + /* Listener que dispara quando a requisição ao core da erro */ |
68 | + child.on('error', function(code, signal){ | ||
69 | + res.send(500, parameters.errorMessage('Erro na chamada ao core')); | ||
70 | + db.update(request_object, 'Error', function(result) { | ||
71 | + }); | ||
72 | + }); | ||
79 | 73 | ||
74 | + }); | ||
80 | 75 | ||
81 | - /* Listener que dispara quando a requisição ao core finaliza */ | ||
82 | -// child.on('close', function(code, signal){ | ||
83 | -// // res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.webm' }); | ||
84 | -// db.update(request_object, 'Completed', function(result) { | ||
85 | -// }); | ||
86 | -// }); | ||
87 | -// | ||
88 | -// /* Listener que dispara quando a requisição ao core da erro */ | ||
89 | -// child.on('error', function(code, signal){ | ||
90 | -// res.send(500, parameters.errorMessage('Erro na chamada ao core')); | ||
91 | -// db.update(request_object, 'Error', function(result) { | ||
92 | -// }); | ||
93 | -// }); | ||
94 | } | 76 | } |
95 | 77 | ||
96 | module.exports.init = init; | 78 | module.exports.init = init; |
endpoints/video.js
@@ -21,7 +21,7 @@ function init(req, res) { | @@ -21,7 +21,7 @@ function init(req, res) { | ||
21 | res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); | 21 | res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); |
22 | return; | 22 | return; |
23 | } | 23 | } |
24 | - | 24 | + |
25 | process(req, res); | 25 | process(req, res); |
26 | }; | 26 | }; |
27 | 27 | ||
@@ -29,7 +29,7 @@ function process(req, res) { | @@ -29,7 +29,7 @@ function process(req, res) { | ||
29 | var id = uuid.v4(); | 29 | var id = uuid.v4(); |
30 | var folder = properties.uploads_folder + id; | 30 | var folder = properties.uploads_folder + id; |
31 | var locals = {}; | 31 | var locals = {}; |
32 | - | 32 | + |
33 | async.series([ | 33 | async.series([ |
34 | // Cria a pasta apropriada | 34 | // Cria a pasta apropriada |
35 | function(callback) { | 35 | function(callback) { |
endpoints/video_legenda.js
@@ -21,7 +21,7 @@ function init(req, res) { | @@ -21,7 +21,7 @@ function init(req, res) { | ||
21 | res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); | 21 | res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); |
22 | return; | 22 | return; |
23 | } | 23 | } |
24 | - | 24 | + |
25 | process(req, res); | 25 | process(req, res); |
26 | }; | 26 | }; |
27 | 27 | ||
@@ -29,7 +29,7 @@ function process(req, res) { | @@ -29,7 +29,7 @@ function process(req, res) { | ||
29 | var id = uuid.v4(); | 29 | var id = uuid.v4(); |
30 | var folder = properties.uploads_folder + id; | 30 | var folder = properties.uploads_folder + id; |
31 | var locals = {}; | 31 | var locals = {}; |
32 | - | 32 | + |
33 | async.series([ | 33 | async.series([ |
34 | // Cria a pasta apropriada | 34 | // Cria a pasta apropriada |
35 | function(callback) { | 35 | function(callback) { |
helpers/core.js
1 | var requests = require('../helpers/requests'); | 1 | var requests = require('../helpers/requests'); |
2 | var properties = require('../helpers/properties'); | 2 | var properties = require('../helpers/properties'); |
3 | - | 3 | +var queue_helper = require('../helpers/queue'); |
4 | var url = require('url'); | 4 | var url = require('url'); |
5 | var http = require('http'); | 5 | var http = require('http'); |
6 | var querystring = require('querystring'); | 6 | var querystring = require('querystring'); |
7 | var exec = require('child_process').exec, child; | 7 | var exec = require('child_process').exec, child; |
8 | +var kue = require('kue'), | ||
9 | + queue = kue.createQueue(); | ||
8 | 10 | ||
9 | function call(id, command_line, req, res) { | 11 | function call(id, command_line, req, res) { |
10 | /* Executa a linha de comando */ | 12 | /* Executa a linha de comando */ |
11 | - child = exec(command_line, function(err, stdout, stderr) { | ||
12 | - // [stdout] = vlibras-core output | ||
13 | - // console.log('Err: ' + err); | ||
14 | - // console.log('STDOUT: ' + stdout); | ||
15 | - // console.log('STDERR: ' + stderr); | 13 | + // child = exec(command_line, function(err, stdout, stderr) { |
14 | + // // [stdout] = vlibras-core output | ||
15 | + // // console.log('Err: ' + err); | ||
16 | + // // console.log('STDOUT: ' + stdout); | ||
17 | + // // console.log('STDERR: ' + stderr); | ||
18 | + // }); | ||
19 | + | ||
20 | + var child, | ||
21 | + job = queue.create('exec_command_line', { | ||
22 | + title: 'Command Line for: ' + req.body.servico, | ||
23 | + command_line: command_line | ||
24 | + }).save(); | ||
25 | + | ||
26 | + queue.process('exec_command_line', function(job, done){ | ||
27 | + child = queue_helper.exec_command_line(job.data.command_line, done); | ||
28 | + if (child === undefined) { | ||
29 | + throw "Erro ao conectar com o core"; | ||
30 | + } | ||
16 | }); | 31 | }); |
17 | 32 | ||
18 | - // Se o callback não foi definido | ||
19 | - if (req.body.callback === undefined) { | 33 | + job.on('complete', function() { |
34 | + // Se o callback não foi definido | ||
35 | + if (req.body.callback === undefined) { | ||
20 | 36 | ||
21 | - // Se a chamada foi feita com sucesso | ||
22 | - child.on('close', function(code, signal) { | 37 | + // Se a chamada foi feita com sucesso |
38 | + child.on('close', function(code, signal) { | ||
23 | 39 | ||
24 | - // Se o core executou com erro | ||
25 | - if (code !== 0) { | ||
26 | - throw "Erro no retorno do core. Código: " + code; | ||
27 | - } | 40 | + // Se o core executou com erro |
41 | + if (code !== 0) { | ||
42 | + throw "Erro no retorno do core. Código: " + code; | ||
43 | + } | ||
28 | 44 | ||
29 | - // Se o core executou normal | ||
30 | - res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.mp4'}); | ||
31 | - }); | 45 | + // Se o core executou normal |
46 | + res.send(200, { 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.mp4'}); | ||
47 | + }); | ||
32 | 48 | ||
33 | - // Se a chamada deu erro | ||
34 | - child.on('error', function(code, signal) { | ||
35 | - throw "Erro na chamada ao core"; | ||
36 | - }); | 49 | + // Se a chamada deu erro |
50 | + child.on('error', function(code, signal) { | ||
51 | + throw "Erro na chamada ao core"; | ||
52 | + }); | ||
37 | 53 | ||
38 | 54 | ||
39 | - // Se o callback foi definido | ||
40 | - } else { | 55 | + // Se o callback foi definido |
56 | + } else { | ||
41 | 57 | ||
42 | - // Se a chamada foi feita com sucesso | ||
43 | - child.on('close', function(code, signal) { | 58 | + // Se a chamada foi feita com sucesso |
59 | + child.on('close', function(code, signal) { | ||
44 | 60 | ||
45 | - // Endereço do callback | ||
46 | - var path = url.parse(req.body.callback); | 61 | + // Endereço do callback |
62 | + var path = url.parse(req.body.callback); | ||
47 | 63 | ||
48 | - // Se o core executou com erro | ||
49 | - if (code === 0) { | ||
50 | - var data = querystring.stringify({ 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.mp4', 'id' : id }); | ||
51 | - } else { | ||
52 | - var data = querystring.stringify({ 'error': 'Erro no Core', 'code': code, 'id' : id }); | ||
53 | - } | 64 | + // Se o core executou com erro |
65 | + if (code === 0) { | ||
66 | + var data = querystring.stringify({ 'response' : 'http://' + properties.SERVER_IP + ':' + properties.port + '/' + id + '.mp4', 'id' : id }); | ||
67 | + } else { | ||
68 | + var data = querystring.stringify({ 'error': 'Erro no Core', 'code': code, 'id' : id }); | ||
69 | + } | ||
54 | 70 | ||
55 | - // Chama o callback | ||
56 | - requests.postRequest(path, data); | ||
57 | - }); | 71 | + // Chama o callback |
72 | + requests.postRequest(path, data); | ||
73 | + }); | ||
58 | 74 | ||
59 | - // Se a chamada deu erro | ||
60 | - child.on('error', function(code, signal) { | ||
61 | - var path = url.parse(req.body.callback); | ||
62 | - var data = querystring.stringify( { 'error': 'Erro na chamada ao core', 'code': code, 'id': id } ); | 75 | + // Se a chamada deu erro |
76 | + child.on('error', function(code, signal) { | ||
77 | + var path = url.parse(req.body.callback); | ||
78 | + var data = querystring.stringify( { 'error': 'Erro na chamada ao core', 'code': code, 'id': id } ); | ||
63 | 79 | ||
64 | - requests.postRequest(path, data); | ||
65 | - }); | 80 | + requests.postRequest(path, data); |
81 | + }); | ||
66 | 82 | ||
67 | - // Retorno da primeira requisição | ||
68 | - res.send(200, JSON.stringify({ 'id': id })); | ||
69 | - } | 83 | + // Retorno da primeira requisição |
84 | + res.send(200, JSON.stringify({ 'id': id })); | ||
85 | + } | ||
86 | + }); | ||
70 | } | 87 | } |
71 | 88 | ||
72 | -module.exports.call = call; | ||
73 | \ No newline at end of file | 89 | \ No newline at end of file |
90 | +module.exports.call = call; |
helpers/queue.js
1 | var exec = require('child_process').exec, child; | 1 | var exec = require('child_process').exec, child; |
2 | 2 | ||
3 | exports.exec_command_line = function (command_line, callback) { | 3 | exports.exec_command_line = function (command_line, callback) { |
4 | - child = exec(command_line, function(err, stdout, stderr) { | ||
5 | - // [stdout] = vlibras-core output | ||
6 | - }); | ||
7 | - callback(); | 4 | + |
5 | + child = exec(command_line, function(err, stdout, stderr) { | ||
6 | + // console.log('Err: ' + err); | ||
7 | + // console.log('STDOUT: ' + stdout); | ||
8 | + // console.log('STDERR: ' + stderr); | ||
9 | + }); | ||
10 | + //callback(); | ||
11 | + // if (child === undefined) { | ||
12 | + // throw "Erro ao conectar com o core"; | ||
13 | + // } | ||
14 | + child.on('error', function(code, signal) { | ||
15 | + throw "Erro ao conectar com o core"; | ||
16 | + }); | ||
17 | + child.on('disconnect', function(code, signal) { | ||
18 | + throw "Disconectado do core"; | ||
19 | + }); | ||
20 | + return child; | ||
21 | + | ||
8 | }; | 22 | }; |
node_modules/ip/package.json
1 | { | 1 | { |
2 | "name": "ip", | 2 | "name": "ip", |
3 | - "version": "0.3.2", | 3 | + "version": "0.3.3", |
4 | "author": { | 4 | "author": { |
5 | "name": "Fedor Indutny", | 5 | "name": "Fedor Indutny", |
6 | "email": "fedor@indutny.com" | 6 | "email": "fedor@indutny.com" |
@@ -8,7 +8,7 @@ | @@ -8,7 +8,7 @@ | ||
8 | "homepage": "https://github.com/indutny/node-ip", | 8 | "homepage": "https://github.com/indutny/node-ip", |
9 | "repository": { | 9 | "repository": { |
10 | "type": "git", | 10 | "type": "git", |
11 | - "url": "http://github.com/indutny/node-ip.git" | 11 | + "url": "git+ssh://git@github.com/indutny/node-ip.git" |
12 | }, | 12 | }, |
13 | "main": "lib/ip", | 13 | "main": "lib/ip", |
14 | "devDependencies": { | 14 | "devDependencies": { |
@@ -17,15 +17,17 @@ | @@ -17,15 +17,17 @@ | ||
17 | "scripts": { | 17 | "scripts": { |
18 | "test": "mocha --reporter spec test/*-test.js" | 18 | "test": "mocha --reporter spec test/*-test.js" |
19 | }, | 19 | }, |
20 | - "gitHead": "978e13d19531c9d9172044654df9dfb7ed116e45", | 20 | + "license": "MIT", |
21 | + "gitHead": "7798e2d222718087863d8a5a99e3c02f3a30e2b9", | ||
21 | "description": "IP address utilities for node.js", | 22 | "description": "IP address utilities for node.js", |
22 | "bugs": { | 23 | "bugs": { |
23 | "url": "https://github.com/indutny/node-ip/issues" | 24 | "url": "https://github.com/indutny/node-ip/issues" |
24 | }, | 25 | }, |
25 | - "_id": "ip@0.3.2", | ||
26 | - "_shasum": "7d5ed34326688b36b6ab81f1865ea8266c28f0db", | 26 | + "_id": "ip@0.3.3", |
27 | + "_shasum": "8ee8309e92f0b040d287f72efaca1a21702d3fb4", | ||
27 | "_from": "ip@latest", | 28 | "_from": "ip@latest", |
28 | - "_npmVersion": "1.4.28", | 29 | + "_npmVersion": "2.9.0", |
30 | + "_nodeVersion": "2.0.0", | ||
29 | "_npmUser": { | 31 | "_npmUser": { |
30 | "name": "indutny", | 32 | "name": "indutny", |
31 | "email": "fedor@indutny.com" | 33 | "email": "fedor@indutny.com" |
@@ -45,9 +47,9 @@ | @@ -45,9 +47,9 @@ | ||
45 | } | 47 | } |
46 | ], | 48 | ], |
47 | "dist": { | 49 | "dist": { |
48 | - "shasum": "7d5ed34326688b36b6ab81f1865ea8266c28f0db", | ||
49 | - "tarball": "http://registry.npmjs.org/ip/-/ip-0.3.2.tgz" | 50 | + "shasum": "8ee8309e92f0b040d287f72efaca1a21702d3fb4", |
51 | + "tarball": "http://registry.npmjs.org/ip/-/ip-0.3.3.tgz" | ||
50 | }, | 52 | }, |
51 | "directories": {}, | 53 | "directories": {}, |
52 | - "_resolved": "https://registry.npmjs.org/ip/-/ip-0.3.2.tgz" | 54 | + "_resolved": "https://registry.npmjs.org/ip/-/ip-0.3.3.tgz" |
53 | } | 55 | } |