mirror of
https://github.com/Dahlgren/arma-server-web-admin.git
synced 2024-08-30 17:22:10 +00:00
Display and download logs on Wine and Windows
This commit is contained in:
parent
14ff82d9fa
commit
b57d30f8a4
1
app.js
1
app.js
@ -16,6 +16,7 @@ app.use(express.static(__dirname + '/public'));
|
|||||||
|
|
||||||
var servers = require('./routes/servers');
|
var servers = require('./routes/servers');
|
||||||
|
|
||||||
|
app.resource('api/logs', require('./routes/logs'));
|
||||||
app.resource('api/missions', require('./routes/missions'));
|
app.resource('api/missions', require('./routes/missions'));
|
||||||
app.resource('api/mods', require('./routes/mods'));
|
app.resource('api/mods', require('./routes/mods'));
|
||||||
var serversResource = app.resource('api/servers', servers);
|
var serversResource = app.resource('api/servers', servers);
|
||||||
|
@ -9,10 +9,11 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"async": "^0.9.0",
|
"async": "^0.9.0",
|
||||||
"express": "3.x",
|
"express": "3.x",
|
||||||
"slug": "~0.4.0",
|
|
||||||
"express-resource": "~1.0.0",
|
"express-resource": "~1.0.0",
|
||||||
"when": "~3.1.0",
|
|
||||||
"playwithsix": "0.0.5",
|
"playwithsix": "0.0.5",
|
||||||
"socket.io": "^1.0.4"
|
"slug": "~0.4.0",
|
||||||
|
"socket.io": "^1.0.4",
|
||||||
|
"userhome": "^1.0.0",
|
||||||
|
"when": "~3.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
15
public/js/app/collections/logs.js
Normal file
15
public/js/app/collections/logs.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
define(function (require) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var $ = require('jquery'),
|
||||||
|
_ = require('underscore'),
|
||||||
|
Backbone = require('backbone'),
|
||||||
|
Log = require('app/models/log');
|
||||||
|
|
||||||
|
return Backbone.Collection.extend({
|
||||||
|
model: Log,
|
||||||
|
url: '/api/logs/'
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
15
public/js/app/models/log.js
Normal file
15
public/js/app/models/log.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
define(function (require) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var $ = require('jquery'),
|
||||||
|
_ = require('underscore'),
|
||||||
|
Backbone = require('backbone');
|
||||||
|
|
||||||
|
return Backbone.Model.extend({
|
||||||
|
defaults: {
|
||||||
|
name: ''
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
@ -7,9 +7,11 @@ define(function (require) {
|
|||||||
LayoutView = require('app/views/layout'),
|
LayoutView = require('app/views/layout'),
|
||||||
NavigationView = require('app/views/navigation'),
|
NavigationView = require('app/views/navigation'),
|
||||||
ServersView = require('app/views/servers/list'),
|
ServersView = require('app/views/servers/list'),
|
||||||
|
LogsListView = require('app/views/logs/list'),
|
||||||
MissionsView = require('app/views/missions/index'),
|
MissionsView = require('app/views/missions/index'),
|
||||||
ModsListView = require('app/views/mods/list'),
|
ModsListView = require('app/views/mods/list'),
|
||||||
ServerView = require('app/views/servers/view'),
|
ServerView = require('app/views/servers/view'),
|
||||||
|
Logs = require('app/collections/logs'),
|
||||||
Missions = require('app/collections/missions'),
|
Missions = require('app/collections/missions'),
|
||||||
Mods = require('app/collections/mods'),
|
Mods = require('app/collections/mods'),
|
||||||
Servers = require('app/collections/servers'),
|
Servers = require('app/collections/servers'),
|
||||||
@ -27,6 +29,7 @@ define(function (require) {
|
|||||||
return Backbone.Router.extend({
|
return Backbone.Router.extend({
|
||||||
|
|
||||||
routes: {
|
routes: {
|
||||||
|
"logs": "logs",
|
||||||
"missions": "missions",
|
"missions": "missions",
|
||||||
"mods": "mods",
|
"mods": "mods",
|
||||||
"servers/:id": "server",
|
"servers/:id": "server",
|
||||||
@ -49,6 +52,12 @@ define(function (require) {
|
|||||||
serversView.delegateEvents();
|
serversView.delegateEvents();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
logs: function () {
|
||||||
|
var logs = new Logs();
|
||||||
|
logs.fetch();
|
||||||
|
layoutView.content.show(new LogsListView({collection: logs}));
|
||||||
|
},
|
||||||
|
|
||||||
missions: function () {
|
missions: function () {
|
||||||
layoutView.content.show(missionsView);
|
layoutView.content.show(missionsView);
|
||||||
missionsView.delegateEvents();
|
missionsView.delegateEvents();
|
||||||
|
19
public/js/app/views/logs/list.js
Normal file
19
public/js/app/views/logs/list.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
define(function (require) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var $ = require('jquery'),
|
||||||
|
_ = require('underscore'),
|
||||||
|
Backbone = require('backbone'),
|
||||||
|
Marionette = require('marionette'),
|
||||||
|
ListItemView = require('app/views/logs/list_item'),
|
||||||
|
tpl = require('text!tpl/logs/list.html'),
|
||||||
|
|
||||||
|
template = _.template(tpl);
|
||||||
|
|
||||||
|
return Marionette.CompositeView.extend({
|
||||||
|
itemView: ListItemView,
|
||||||
|
itemViewContainer: "tbody",
|
||||||
|
template: template,
|
||||||
|
});
|
||||||
|
});
|
17
public/js/app/views/logs/list_item.js
Normal file
17
public/js/app/views/logs/list_item.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
define(function (require) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var $ = require('jquery'),
|
||||||
|
_ = require('underscore'),
|
||||||
|
Backbone = require('backbone'),
|
||||||
|
Marionette = require('marionette'),
|
||||||
|
tpl = require('text!tpl/logs/list_item.html'),
|
||||||
|
|
||||||
|
template = _.template(tpl);
|
||||||
|
|
||||||
|
return Marionette.ItemView.extend({
|
||||||
|
tagName: "tr",
|
||||||
|
template: template,
|
||||||
|
});
|
||||||
|
});
|
10
public/js/tpl/logs/list.html
Normal file
10
public/js/tpl/logs/list.html
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Log</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<!-- want to insert collection items, here -->
|
||||||
|
<tbody></tbody>
|
||||||
|
</table>
|
3
public/js/tpl/logs/list_item.html
Normal file
3
public/js/tpl/logs/list_item.html
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<td style="width: 100%;">
|
||||||
|
<a href='/api/logs/<%-name%>'><%-name%></a>
|
||||||
|
</td>
|
@ -12,6 +12,7 @@
|
|||||||
<div class="navbar-collapse collapse">
|
<div class="navbar-collapse collapse">
|
||||||
<ul class="nav navbar-nav navbar-right">
|
<ul class="nav navbar-nav navbar-right">
|
||||||
<li><a href="#" id="dashboard">Dashboard</a></li>
|
<li><a href="#" id="dashboard">Dashboard</a></li>
|
||||||
|
<li><a href="#logs" id="logs">Logs</a></li>
|
||||||
<li><a href="#missions" id="missions">Missions</a></li>
|
<li><a href="#missions" id="missions">Missions</a></li>
|
||||||
<li><a href="#mods" id="mods">Mods</a></li>
|
<li><a href="#mods" id="mods">Mods</a></li>
|
||||||
<li><a href="#" id="settings">Settings</a></li>
|
<li><a href="#" id="settings">Settings</a></li>
|
||||||
|
91
routes/logs.js
Normal file
91
routes/logs.js
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
var async = require('async');
|
||||||
|
var fs = require('fs');
|
||||||
|
var path = require('path');
|
||||||
|
var userhome = require('userhome');
|
||||||
|
|
||||||
|
var config = require('./../config');
|
||||||
|
|
||||||
|
function logsPath() {
|
||||||
|
if (config.type === "windows") {
|
||||||
|
return userhome('AppData', 'Local', 'Arma 3');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.type === "wine") {
|
||||||
|
var username = process.env.USER;
|
||||||
|
return userhome('.wine', 'drive_c', 'users', username, 'Local Settings', 'Application Data', 'Arma 3');
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function logFiles(directory, callback) {
|
||||||
|
fs.readdir(directory, function (err, files) {
|
||||||
|
if (err) {
|
||||||
|
callback (err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
files = files.map(function (file) {
|
||||||
|
return path.join(directory, file);
|
||||||
|
});
|
||||||
|
|
||||||
|
async.filter(files, function(file, cb) {
|
||||||
|
fs.stat(file, function (err, file) {
|
||||||
|
cb(!err && file.isFile());
|
||||||
|
});
|
||||||
|
}, function (files) {
|
||||||
|
callback(null, files.map(path.basename).sort());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.index = function(req, res){
|
||||||
|
var pathToLogs = logsPath();
|
||||||
|
|
||||||
|
if (pathToLogs === null) {
|
||||||
|
res.send([]);
|
||||||
|
} else {
|
||||||
|
logFiles(pathToLogs, function (err, files) {
|
||||||
|
if (err) {
|
||||||
|
res.send(err);
|
||||||
|
} else {
|
||||||
|
var logs = files.map(function (filename) {
|
||||||
|
return { name: filename };
|
||||||
|
});
|
||||||
|
res.send(logs);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.show = function(req, res){
|
||||||
|
var pathToLogs = logsPath();
|
||||||
|
|
||||||
|
var requestedFilename = req.params.log;
|
||||||
|
if (req.format) {
|
||||||
|
requestedFilename += "." + req.format;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pathToLogs === null) {
|
||||||
|
res.send(404, new Error("File not found"));
|
||||||
|
} else {
|
||||||
|
logFiles(pathToLogs, function (err, files) {
|
||||||
|
var logfile = null;
|
||||||
|
if (err) {
|
||||||
|
res.send(err);
|
||||||
|
} else {
|
||||||
|
var logs = files.map(function (filename) {
|
||||||
|
if (filename === requestedFilename) {
|
||||||
|
logfile = path.join(pathToLogs, filename);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (logfile) {
|
||||||
|
res.download(logfile);
|
||||||
|
} else {
|
||||||
|
res.send(404, new Error("File not found"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user