Skip to content

Commit 4c19023

Browse files
author
Evgheni C.
committed
Merge pull request #7 from NetCrafters/feature-config-file
Extract database config to a file and share db with child.
2 parents adb8894 + d211319 commit 4c19023

File tree

5 files changed

+61
-20
lines changed

5 files changed

+61
-20
lines changed

app.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ var express = require('express')
66
, http = require('http')
77
, path = require('path')
88
, partials = require('express-partials')
9-
, app = express();
9+
, config = require('./config')
10+
, app = express();
1011

11-
global.io = require('socket.io').listen(app.listen( 3000 ));
12+
global.io = require('socket.io').listen(app.listen( config.port ));
1213

1314
io.configure(function () {
1415
io.set('transports', ['websocket', 'xhr-polling']);
15-
io.set('log level', 0);
16+
io.set('log level', config.log_level);
1617
io.set('force new connection', true);
1718
});
1819

@@ -21,10 +22,16 @@ io.sockets.on('connection', function (socket)
2122
socket.on('setMaxThreads', function(data){ });
2223
});
2324

25+
// db connect
26+
var db = require('mongoose');
27+
db.connect(config.db.service+'://'+config.db.host+'/'+config.db.database);
28+
2429
app.configure(function() {
2530
app.set('views', __dirname + '/views');
2631
app.set('view engine', 'ejs');
2732
app.set('view options', { layout:true, pretty: true });
33+
app.set('config', config);
34+
app.set('db', db);
2835
app.use(express.favicon());
2936
app.use(express.logger('dev'));
3037
app.use(express.bodyParser());
@@ -39,3 +46,4 @@ app.configure('development', function(){
3946
});
4047

4148
require('./routes')(app);
49+

config.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"log_level": 0,
3+
"port": 3000,
4+
"db": {
5+
"service": "mongodb",
6+
"host": "localhost",
7+
"database": "search_for_404_v4"
8+
}
9+
}

crawling-daemon.js

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,41 @@
22
Scraper app. Only runs as child forked process.
33
*/
44

5-
var util = require('util'),
6-
http = require('http'),
7-
url = require('url'),
8-
mongoose= require('mongoose'),
9-
argv = require('named-argv'),
10-
jsdom = require('jsdom');
11-
12-
mongoose.connect('mongodb://localhost/search_for_404_v4');
5+
var util = require('util'),
6+
http = require('http'),
7+
url = require('url'),
8+
mongoose = require('mongoose'),
9+
argv = require('named-argv'),
10+
jsdom = require('jsdom');
1311

1412
/*
1513
requestsRunningPool: array of links are requesting now
1614
*/
1715

18-
var scrapeHost = "", max_depth, create_sitemap, link, auth = {},
19-
LinksCheckModel, LinksGrabbedModel,
20-
requestsRunning = 0, requestsRunningPool = [], requestsPerSecond = 0, maxThreads = 5,
21-
checkUrlInterval = null, processingDOM = false;
16+
var scrapeHost = "",
17+
max_depth,
18+
create_sitemap,
19+
link,
20+
auth = {},
21+
LinksCheckModel,
22+
LinksGrabbedModel,
23+
requestsRunning = 0,
24+
requestsRunningPool = [],
25+
requestsPerSecond = 0,
26+
maxThreads = 5,
27+
checkUrlInterval = null,
28+
processingDOM = false,
29+
config;
2230

2331
process.on("message", function(data)
2432
{
2533
switch (data.action)
2634
{
35+
case "setConfig":
36+
config = data.config;
37+
mongoose.connect(config.db.service+'://'+config.db.host+'/'+config.db.database);
38+
break;
39+
2740
case "setAuth":
2841
auth.user = data.auth_user;
2942
auth.pass = data.auth_pass;

routes/index.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ module.exports = function(app) {
1313
}
1414

1515
function getHomePage(req, res) {
16-
res.render('index');
16+
var port = res.app.settings.config.port;
17+
18+
res.render('index', {
19+
port: port
20+
});
1721
}
1822

1923
function postAddScraper(req, res)
@@ -23,9 +27,16 @@ function postAddScraper(req, res)
2327
auth_pass = req.body.auth_pass,
2428
depth = parseInt(req.body.create_crawler_depth),
2529
create_sitemap = req.body.create_crawler_sitemap == 1,
26-
clean = req.body.clean_crawl == 1;
30+
clean = req.body.clean_crawl == 1,
31+
config = res.app.settings.config;
2732

2833
var child = child_process.fork("crawling-daemon.js");
34+
35+
// setup config
36+
child.send({
37+
action: "setConfig",
38+
config: config
39+
});
2940

3041
if (auth_user!="" && auth_pass!="")
3142
child.send(
@@ -114,4 +125,4 @@ function postAddScraper(req, res)
114125

115126
// child_processes[url] = child;
116127
res.redirect("/");
117-
}
128+
}

views/layout.ejs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<html lang="en">
33
<head>
44
<meta charset="utf-8">
5-
<title>Bootstrap, from Twitter</title>
5+
<title>Node Web Crawler</title>
66
<meta name="viewport" content="width=device-width, initial-scale=1.0">
77
<meta name="description" content="">
88
<meta name="author" content="">
@@ -17,7 +17,7 @@
1717
<script src="/socket.io/socket.io.js"></script>
1818

1919
<script>
20-
var socket = io.connect(window.___location.hostname, {port: 3000});
20+
var socket = io.connect(window.___location.hostname, {port: <%= port %>});
2121
</script>
2222
</head>
2323

0 commit comments

Comments
 (0)