From a3391a667e224fe114d79e47e3133735136a8ddc Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 24 Aug 2017 22:49:24 -0400 Subject: [PATCH] Add server status page --- src/bitrate.js | 11 +++++++++++ src/reducers/index.js | 2 ++ src/reducers/server.js | 16 ++++++++++++++++ src/ui/main.js | 4 +++- src/ui/server.js | 31 +++++++++++++++++++++++++++++++ src/ui/torrent_table.js | 13 +------------ 6 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 src/bitrate.js create mode 100644 src/reducers/server.js create mode 100644 src/ui/server.js diff --git a/src/bitrate.js b/src/bitrate.js new file mode 100644 index 0000000..33e750d --- /dev/null +++ b/src/bitrate.js @@ -0,0 +1,11 @@ +export function formatBitrate(bitrate) { + if (bitrate > 1000000000) { + return `${(bitrate / 1000000000).toFixed(2)} Gb/s`; + } else if (bitrate > 1000000) { + return `${(bitrate / 1000000).toFixed(2)} Mb/s`; + } else if (bitrate > 1000) { + return `${(bitrate / 1000).toFixed(2)} Kb/s`; + } else { + return `${bitrate} b/s`; + } +} diff --git a/src/reducers/index.js b/src/reducers/index.js index ba1dc2b..d22999c 100644 --- a/src/reducers/index.js +++ b/src/reducers/index.js @@ -2,12 +2,14 @@ import { combineReducers } from 'redux'; import { routerReducer } from 'react-router-redux' import subscribe from './subscribe'; import filter_subscribe from './filter_subscribe'; +import server from './server'; import torrents from './torrents'; import files from './files'; const root = combineReducers({ subscribe, filter_subscribe, + server, torrents, files, router: routerReducer diff --git a/src/reducers/server.js b/src/reducers/server.js new file mode 100644 index 0000000..25b3c91 --- /dev/null +++ b/src/reducers/server.js @@ -0,0 +1,16 @@ +import { + UPDATE_RESOURCES, + RESOURCES_REMOVED +} from '../actions/resources'; + +export default function server(state = {}, action) { + switch (action.type) { + case UPDATE_RESOURCES: + if (action.resources.length !== 1 || + action.resources[0].type !== "server") { + return state; + } + return { ...state, ...action.resources[0] }; + } + return state; +} diff --git a/src/ui/main.js b/src/ui/main.js index 9a33210..50d6dc0 100644 --- a/src/ui/main.js +++ b/src/ui/main.js @@ -1,8 +1,9 @@ import React, { Component } from 'react'; -import { Route } from 'react-router'; +import { Route, DefaultRoute } from 'react-router'; import TorrentTable from './torrent_table'; import AddTorrent from './add_torrent'; import TorrentDetails from './torrent_details'; +import Server from './server'; export default class Main extends Component { render() { @@ -14,6 +15,7 @@ export default class Main extends Component {
+
); diff --git a/src/ui/server.js b/src/ui/server.js new file mode 100644 index 0000000..92510cf --- /dev/null +++ b/src/ui/server.js @@ -0,0 +1,31 @@ +import React, { Component } from 'react'; +import { connect } from 'react-redux'; +import { formatBitrate } from '../bitrate'; + +function Server({ server }) { + if (!server.id) { + // TODO: websocket status? + return null; + } + return ( +
+

Server

+
+
Running since
+ {/* TODO: pretty print dates */} +
{server.started}
+
Rate up
+
{formatBitrate(server.rate_up)}
+
Rate down
+
{formatBitrate(server.rate_down)}
+ {/* TODO: Editable */} +
Throttle up
+
{formatBitrate(server.throttle_up)}
+
Throttle down
+
{formatBitrate(server.throttle_down)}
+
+
+ ); +} + +export default connect(state => ({ server: state.server }))(Server); diff --git a/src/ui/torrent_table.js b/src/ui/torrent_table.js index 6dee8ef..5f3ef83 100644 --- a/src/ui/torrent_table.js +++ b/src/ui/torrent_table.js @@ -1,18 +1,7 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; import { activeTorrents, selectTorrent, selectop } from '../torrent_state'; - -function formatBitrate(bitrate) { - if (bitrate > 1000000000) { - return `${(bitrate / 1000000000).toFixed(2)} Gb/s`; - } else if (bitrate > 1000000) { - return `${(bitrate / 1000000).toFixed(2)} Mb/s`; - } else if (bitrate > 1000) { - return `${(bitrate / 1000).toFixed(2)} Kb/s`; - } else { - return `${bitrate} b/s`; - } -} +import { formatBitrate } from '../bitrate'; class TorrentTable extends Component { render() {