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