You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
3.8 KiB
JavaScript

import React from 'react';
import Form from "react-jsonschema-form";
import fetchError from './fetcherror';
const schema = {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"enable": {
"title": "Enabled?",
"type": "boolean"
},
"exitOnComplete": {
"title": "Exit server on completion?",
"type": "boolean"
},
"exitCode": {
"title": "Exit code when exiting. 0 is success.",
"type": "integer"
},
"numToGen": {
"title": "Number of keys to generate. 0 is infinite.",
"type": "integer"
},
"timeToRun": {
"title": "Time to run, in seconds. 0 is infinite.",
"type": "integer"
},
"memQServer": {
"title": "Base URL of the MemQ server to draw from. Can be http://localhost:8080/memq/server.",
"type": "string"
},
"memQQueue": {
"title": "The Queue to pull work items from.",
"type": "string"
}
}
};
const uiSchema = {
enable: {
classNames: "foo"
}
}
export default class KeyGen extends React.Component {
constructor(props) {
super(props);
this.state = {
config: {
enable: false,
numToGen: 0,
timeToRun: 0,
exitOnComplete: false,
exitCode: 0
},
history: []
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
loadState(initial) {
fetch(this.props.serverPath)
.then(fetchError)
.then(response => response.json())
.then(response => {
if(initial) {
this.setState(response);
} else {
this.setState(state => {
state.history = response.history
return state
})
}
})
.catch(err => this.context.reportConnError());
}
componentDidMount() {
this.loadState(true)
this.timer = setInterval(this.loadState.bind(this, false), 1000);
}
componentWillUnmount() {
clearInterval(this.timer);
}
handleSubmit(event) {
let payload = JSON.stringify(this.state.config);
fetch(this.props.serverPath, {
method: "PUT",
body: payload
})
.then(fetchError)
.then(response => response.json())
.then(response => this.setState(previousState => {
previousState = response
return previousState
}))
.catch(err => this.context.reportConnError());
}
handleChange({formData}) {
this.setState(state => {
state.config = formData;
return state
})
}
render () {
let history = <p>No recorded workload history</p>
if (this.state.history.length > 0) {
let historyItems = [];
for (let h of this.state.history) {
historyItems.push(<span key={h.id}>{h.data}{"\n"}</span>)
}
historyItems.reverse()
history = (<pre>{historyItems}</pre>)
}
return (
<div>
<div className="panel panel-default">
<div className="panel-heading">KeyGen Synthetic Workload</div>
<div className="panel-body">
<div>This controls a synthetic workload on the server: creating 4096
bit RSA key pairs. These parameters control how many to create
and, optionally, cause the server to exit with a specific exit
code.
</div>
<Form
schema={schema}
uiSchema={uiSchema}
className="form"
formData={this.state.config}
onChange={this.handleChange}
onSubmit={this.handleSubmit}>
<input
className="btn btn-default"
type="submit"
value="Submit" />
</Form>
</div>
</div>
{history}
</div>
)
}
}
KeyGen.propTypes = {
serverPath: React.PropTypes.string.isRequired,
}
KeyGen.contextTypes = {
reportConnError: React.PropTypes.func
};