From 7f0e266f8c4e13b9fa30fb8abf80bbd7a0327842 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 05 Jan 2019 01:37:07 +0000
Subject: [PATCH] Job monitor...
---
borgbutler-webapp/src/components/views/jobs/JobMonitorPanel.jsx | 76 +++++++++++++++++++++++++
borgbutler-webapp/src/components/views/jobs/Job.jsx | 19 ++++++
borgbutler-webapp/src/containers/WebApp.jsx | 2
borgbutler-webapp/src/components/views/jobs/JobMonitorView.jsx | 17 +++++
borgbutler-webapp/src/components/views/jobs/JobQueue.jsx | 16 +++++
5 files changed, 130 insertions(+), 0 deletions(-)
diff --git a/borgbutler-webapp/src/components/views/jobs/Job.jsx b/borgbutler-webapp/src/components/views/jobs/Job.jsx
new file mode 100644
index 0000000..57572c0
--- /dev/null
+++ b/borgbutler-webapp/src/components/views/jobs/Job.jsx
@@ -0,0 +1,19 @@
+import React from 'react';
+import {Progress} from 'reactstrap';
+
+function Job({job}) {
+ let content = undefined;
+ if (job.status === 'RUNNING') {
+ content = <Progress animated color={'success'} value="100">{job.progressText}</Progress>;
+ } else {
+ content = <Progress color={'info'} value="100">{job.status}</Progress>
+ }
+ return (
+ <div>
+ <div>{job.description}</div>
+ {content}
+ </div>
+ )
+}
+
+export default Job;
diff --git a/borgbutler-webapp/src/components/views/jobs/JobMonitorPanel.jsx b/borgbutler-webapp/src/components/views/jobs/JobMonitorPanel.jsx
new file mode 100644
index 0000000..085c6c5
--- /dev/null
+++ b/borgbutler-webapp/src/components/views/jobs/JobMonitorPanel.jsx
@@ -0,0 +1,76 @@
+import React from 'react';
+import {getRestServiceUrl} from "../../../utilities/global";
+import JobQueue from "./JobQueue";
+import ErrorAlert from "../archives/ArchiveView";
+
+class JobMonitorPanel extends React.Component {
+ state = {
+ isFetching: false
+ };
+
+ componentDidMount = () => {
+ this.fetchArchive();
+ };
+
+
+ fetchArchive = (force) => {
+ this.setState({
+ isFetching: true,
+ failed: false
+ });
+ fetch(getRestServiceUrl('jobs'), {
+ method: 'GET',
+ headers: {
+ 'Accept': 'application/json'
+ }
+ })
+ .then(response => response.json())
+ .then(json => {
+ const queues = json.map(queue => {
+ return queue;
+ });
+ this.setState({
+ isFetching: false,
+ queues
+ })
+ })
+ .catch(() => this.setState({isFetching: false, failed: true}));
+ };
+
+ render() {
+ let content = undefined;
+
+ if (this.state.isFetching) {
+ content = <i>Loading...</i>;
+ } else if (this.state.failed) {
+ content = <ErrorAlert
+ title={'Cannot load Repositories'}
+ description={'Something went wrong during contacting the rest api.'}
+ action={{
+ handleClick: this.fetchArchive,
+ title: 'Try again'
+ }}
+ />;
+ } else if (this.state.queues) {
+ content = <React.Fragment>
+ {this.state.queues
+ .map((queue) => <JobQueue
+ queue={queue}
+ key={queue.repo}
+ />)}
+ </React.Fragment>;
+
+ }
+ return <React.Fragment>
+ {content}
+ </React.Fragment>;
+ }
+
+ constructor(props) {
+ super(props);
+
+ this.fetchArchive = this.fetchArchive.bind(this);
+ }
+}
+
+export default JobMonitorPanel;
\ No newline at end of file
diff --git a/borgbutler-webapp/src/components/views/jobs/JobMonitorView.jsx b/borgbutler-webapp/src/components/views/jobs/JobMonitorView.jsx
new file mode 100644
index 0000000..57494bb
--- /dev/null
+++ b/borgbutler-webapp/src/components/views/jobs/JobMonitorView.jsx
@@ -0,0 +1,17 @@
+import React from 'react'
+import {PageHeader} from '../../general/BootstrapComponents';
+import JobMonitorPanel from "./JobMonitorPanel";
+
+class JobMonitorView extends React.Component {
+
+ render = () => {
+ return <React.Fragment>
+ <PageHeader>
+ Job monitor
+ </PageHeader>
+ <JobMonitorPanel/>
+ </React.Fragment>;
+ };
+}
+
+export default JobMonitorView;
diff --git a/borgbutler-webapp/src/components/views/jobs/JobQueue.jsx b/borgbutler-webapp/src/components/views/jobs/JobQueue.jsx
new file mode 100644
index 0000000..965b678
--- /dev/null
+++ b/borgbutler-webapp/src/components/views/jobs/JobQueue.jsx
@@ -0,0 +1,16 @@
+import React from 'react';
+import Job from "./Job";
+
+function JobQueue({queue}) {
+ return (
+ <div>
+ <h2>{queue.repo}</h2>
+ {queue.jobs
+ .map((job, index) => <Job
+ job={job}
+ key={job.commandLineAsString}
+ />)}
+ </div>
+ )
+}
+export default JobQueue;
diff --git a/borgbutler-webapp/src/containers/WebApp.jsx b/borgbutler-webapp/src/containers/WebApp.jsx
index cf71282..0223721 100644
--- a/borgbutler-webapp/src/containers/WebApp.jsx
+++ b/borgbutler-webapp/src/containers/WebApp.jsx
@@ -10,6 +10,7 @@
import ArchiveView from '../components/views/archives/ArchiveView';
import ConfigurationPage from '../components/views/config/ConfigurationPage';
import RestServices from '../components/views/develop/RestServices';
+import JobMonitorView from '../components/views/jobs/JobMonitorView';
import {isDevelopmentMode} from '../utilities/global';
import LogPage from '../components/views/logging/LogPage';
import Footer from '../components/views/footer/Footer';
@@ -28,6 +29,7 @@
let routes = [
['Start', '/', Start],
['Repositories', '/repos', RepoListView],
+ ['Job monitor', '/jobmonitor', JobMonitorView],
[getTranslation('logviewer'), '/logging', LogPage],
[getTranslation('configuration'), '/config', ConfigurationPage]
];
--
Gitblit v1.10.0