restore backup
							parent
							
								
									9c48e80748
								
							
						
					
					
						commit
						848bf44f3a
					
				
							
								
								
									
										26
									
								
								app.js
								
								
								
								
							
							
						
						
									
										26
									
								
								app.js
								
								
								
								
							| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
var express = require('express');
 | 
			
		||||
var app = express();
 | 
			
		||||
var crontab = require("./crontab");
 | 
			
		||||
var restore = require("./restore");
 | 
			
		||||
 | 
			
		||||
// include the routes
 | 
			
		||||
var routes = require("./routes").routes;
 | 
			
		||||
| 
						 | 
				
			
			@ -24,8 +25,6 @@ app.set('port', (process.env.PORT || 8000));
 | 
			
		|||
 | 
			
		||||
app.get(routes.root, function(req, res) {
 | 
			
		||||
	// get all the crontabs
 | 
			
		||||
	//crontab.create_new("/usr/bin/find", "0        2          12             *                *");
 | 
			
		||||
	//crontab.create_new("/sbin/ping -c 1 192.168.0.1 > /dev/null", "*       *       *       *       *");
 | 
			
		||||
	crontab.crontabs( function(docs){
 | 
			
		||||
		res.render('index', {
 | 
			
		||||
			routes : JSON.stringify(routes),
 | 
			
		||||
| 
						 | 
				
			
			@ -70,6 +69,29 @@ app.get(routes.backup, function(req, res) {
 | 
			
		|||
	crontab.backup();
 | 
			
		||||
	res.end();
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
app.get(routes.restore, function(req, res) {
 | 
			
		||||
	// get all the crontabs
 | 
			
		||||
	restore.crontabs(req.query.db, function(docs){
 | 
			
		||||
		res.render('restore', {
 | 
			
		||||
			routes : JSON.stringify(routes),
 | 
			
		||||
			crontabs : JSON.stringify(docs),
 | 
			
		||||
			backups : crontab.get_backup_names(),
 | 
			
		||||
			db: req.query.db
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
app.get(routes.delete_backup, function(req, res) {
 | 
			
		||||
	restore.delete(req.query.db);
 | 
			
		||||
	res.end();
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
app.get(routes.restore_backup, function(req, res) {
 | 
			
		||||
	crontab.restore(req.query.db);
 | 
			
		||||
	res.end();
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
app.listen(app.get('port'), function() {
 | 
			
		||||
  console.log("Crontab UI is running at localhost:" + app.get('port'))
 | 
			
		||||
})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,5 +66,10 @@ exports.get_backup_names = function(){
 | 
			
		|||
 | 
			
		||||
exports.backup = function(){
 | 
			
		||||
	//TODO check if it failed
 | 
			
		||||
	fs.createReadStream( __dirname + '/crontabs/crontab.db').pipe(fs.createWriteStream( __dirname + '/crontabs/backup ' + (new Date()).toString() + '.db'));
 | 
			
		||||
	fs.createReadStream( __dirname + '/crontabs/crontab.db').pipe(fs.createWriteStream( __dirname + '/crontabs/backup ' + (new Date()).toString().replace("+", " ") + '.db'));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.restore = function(db_name){
 | 
			
		||||
	fs.createReadStream( __dirname + '/crontabs/' + db_name).pipe(fs.createWriteStream( __dirname + '/crontabs/crontab.db'));
 | 
			
		||||
	db.loadDatabase();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -115,6 +115,23 @@ function doBackup(){
 | 
			
		|||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function delete_backup(db_name){
 | 
			
		||||
	messageBox("<p> Do you want to delete this backup? </p>", "Confirm delete", null, null, function(){
 | 
			
		||||
		$.get(routes.delete_backup, {db: db_name}, function(){
 | 
			
		||||
			location = routes.root;
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function restore_backup(db_name){
 | 
			
		||||
	messageBox("<p> Do you want to restore this backup? </p>", "Confirm restore", null, null, function(){
 | 
			
		||||
		$.get(routes.restore_backup, {db: db_name}, function(){
 | 
			
		||||
			location = routes.root;
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// script corresponding to job popup management
 | 
			
		||||
var schedule = "";
 | 
			
		||||
var job_command = "";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
//load database
 | 
			
		||||
var Datastore = require('nedb');
 | 
			
		||||
 | 
			
		||||
var exec = require('child_process').exec;
 | 
			
		||||
var fs = require('fs');
 | 
			
		||||
 | 
			
		||||
exports.crontabs = function(db_name, callback){
 | 
			
		||||
	var db = new Datastore({ filename: __dirname + '/crontabs/' + db_name });
 | 
			
		||||
	db.loadDatabase(function (err) {
 | 
			
		||||
	});
 | 
			
		||||
	db.find({}, function(err, docs){
 | 
			
		||||
		callback(docs);
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.delete = function(db_name){
 | 
			
		||||
	fs.unlink(__dirname + '/crontabs/' + db_name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,10 +1,12 @@
 | 
			
		|||
exports.routes = {
 | 
			
		||||
	"root" : "/",
 | 
			
		||||
	"downloads" : "/downloads",
 | 
			
		||||
	"save" : "/save",
 | 
			
		||||
	"crontab" : "/crontab",
 | 
			
		||||
	"stop" : "/stop",
 | 
			
		||||
	"start" : "/start",
 | 
			
		||||
	"remove": "/remove",
 | 
			
		||||
	"backup": "/backup",
 | 
			
		||||
	"restore": "/restore",
 | 
			
		||||
	"delete_backup": "/delete",
 | 
			
		||||
	"restore_backup": "/restore_backup"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,8 +69,6 @@
 | 
			
		|||
	<a class="btn btn-info"><span class="glyphicon glyphicon-import" aria-hidden="true"></span> Import from crontab</a>
 | 
			
		||||
	<a class="btn btn-success" onclick="setCrontab();"><span class="glyphicon glyphicon-save" aria-hidden="true"></span> Save to crontab</a>
 | 
			
		||||
</div>
 | 
			
		||||
<div>
 | 
			
		||||
</div>
 | 
			
		||||
<% include popup.ejs %>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
        <span class="icon-bar"></span>
 | 
			
		||||
        <span class="icon-bar"></span>
 | 
			
		||||
      </button>
 | 
			
		||||
      <a class="navbar-brand" href="<%= routes.root %>">Crontab UI</a>
 | 
			
		||||
      <a class="navbar-brand" href="<%= JSON.parse(routes).root %>">Crontab UI</a>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- Collect the nav links, forms, and other content for toggling -->
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +22,7 @@
 | 
			
		|||
            	<li><a href="#">None</a></li>
 | 
			
		||||
	    <% } else { %>
 | 
			
		||||
	    	<% backups.forEach(function(file){ %>
 | 
			
		||||
            		<li><a href="#"><%= file %></a></li>
 | 
			
		||||
            		<li><a href="<%= JSON.parse(routes).restore %>?db=<%= file %>"><%= file %></a></li>
 | 
			
		||||
	    	<% }) %>
 | 
			
		||||
	    <% } %>
 | 
			
		||||
          </ul>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,58 @@
 | 
			
		|||
<!doctype html>
 | 
			
		||||
<head>
 | 
			
		||||
<title>Crontab UI</title>
 | 
			
		||||
<script src="jquery.js"></script>
 | 
			
		||||
<script src="script.js"></script>
 | 
			
		||||
<script src="bootstrap.min.js"></script>
 | 
			
		||||
<link rel="stylesheet" href="bootstrap.min.css" />
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
	var crontabs = [];
 | 
			
		||||
	var routes = [];
 | 
			
		||||
	$(function () {
 | 
			
		||||
		// initialize tooltips
 | 
			
		||||
		$('[data-toggle="tooltip"]').tooltip();
 | 
			
		||||
		// TODO handle the commands with quotes
 | 
			
		||||
		crontabs = JSON.parse('<%- crontabs %>');
 | 
			
		||||
		routes = JSON.parse('<%- routes %>');
 | 
			
		||||
	})
 | 
			
		||||
</script>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
<% include navbar %>
 | 
			
		||||
<div class="container">
 | 
			
		||||
	<h2><%= db %></h2>
 | 
			
		||||
	<table class="table">
 | 
			
		||||
	<tr>
 | 
			
		||||
		<th></th>
 | 
			
		||||
		<th>Job</th>
 | 
			
		||||
		<th>Time</th>
 | 
			
		||||
		<th>Last Modified</th>
 | 
			
		||||
	</tr>
 | 
			
		||||
	<% JSON.parse(crontabs).forEach(function(crontab){ %>
 | 
			
		||||
		<!-- color based on crontab state -->
 | 
			
		||||
		<% if (!crontab.stopped) { %>
 | 
			
		||||
			<tr>
 | 
			
		||||
		<% } else { %>
 | 
			
		||||
			<tr style="background:#3A6DA6;color:#fff">
 | 
			
		||||
		<% } %>
 | 
			
		||||
 | 
			
		||||
				<td>
 | 
			
		||||
					<% if (crontab.name) { %>
 | 
			
		||||
					<a class="btn" data-toggle="tooltip" data-placement="right" title="<%= crontab.name %>"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> </a>
 | 
			
		||||
					<% } %>
 | 
			
		||||
				</td>
 | 
			
		||||
				<td><%= crontab.command %></td>
 | 
			
		||||
				<td><%= crontab.schedule %></td>
 | 
			
		||||
				<td><%= crontab.timestamp %></td>
 | 
			
		||||
			</tr>
 | 
			
		||||
	<% }); %>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	</table>
 | 
			
		||||
	<a class="btn btn-primary" onclick="restore_backup('<%= db %>')"><span class="glyphicon glyphicon-floppy-save" aria-hidden="true"></span> Restore</a>
 | 
			
		||||
	<a class="btn btn-danger" onclick="delete_backup('<%= db %>')"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Delete</a>
 | 
			
		||||
</div>
 | 
			
		||||
<% include popup.ejs %>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
		Loading…
	
		Reference in New Issue