Lightweight web server for web commands, start of web config post

This commit is contained in:
Patrick McDonagh
2017-02-28 21:49:52 -06:00
parent 1124d3b10e
commit 0c42974921
6 changed files with 312 additions and 69 deletions

177
.idea/workspace.xml generated
View File

@@ -2,17 +2,10 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="28cc251f-c94f-44ee-a66d-77aaab6e3483" name="Default" comment="">
<change type="DELETED" beforePath="$PROJECT_DIR$/barneyWell.json" afterPath="" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/main/java/com/henrypump/poc/WebServer.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/com/henrypump/poc/Database.java" afterPath="$PROJECT_DIR$/src/main/java/com/henrypump/poc/Database.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/com/henrypump/poc/IOControl.java" afterPath="$PROJECT_DIR$/src/main/java/com/henrypump/poc/IOControl.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/com/henrypump/poc/POC.java" afterPath="$PROJECT_DIR$/src/main/java/com/henrypump/poc/POC.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/main/java/com/henrypump/poc/Well.java" afterPath="$PROJECT_DIR$/src/main/java/com/henrypump/poc/Well.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/www/pocwww/pocwww/__init__.py" afterPath="$PROJECT_DIR$/www/pocwww/pocwww/__init__.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/www/pocwww/pocwww/templates/dashboard.jinja2" afterPath="$PROJECT_DIR$/www/pocwww/pocwww/templates/dashboard.jinja2" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/www/pocwww/pocwww/templates/layout.jinja2" afterPath="$PROJECT_DIR$/www/pocwww/pocwww/templates/layout.jinja2" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/www/pocwww/pocwww/templates/runstatus.jinja2" afterPath="$PROJECT_DIR$/www/pocwww/pocwww/templates/runstatus.jinja2" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/www/pocwww/pocwww/views.py" afterPath="$PROJECT_DIR$/www/pocwww/pocwww/views.py" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/www/pocwww/pocwww/templates/config.jinja2" afterPath="$PROJECT_DIR$/www/pocwww/pocwww/templates/config.jinja2" />
</list>
<ignored path="$PROJECT_DIR$/target/" />
<ignored path="$PROJECT_DIR$/.gradle/" />
@@ -115,14 +108,9 @@
<file leaf-file-name="IOControl.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/IOControl.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="105">
<caret line="7" column="26" lean-forward="false" selection-start-line="7" selection-start-column="26" selection-end-line="7" selection-end-column="26" />
<folding>
<element signature="e#754#755#0" expanded="false" />
<element signature="e#803#804#0" expanded="false" />
<element signature="e#833#834#0" expanded="false" />
<element signature="e#881#882#0" expanded="false" />
</folding>
<state relative-caret-position="915">
<caret line="69" column="5" lean-forward="true" selection-start-line="50" selection-start-column="4" selection-end-line="69" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
@@ -130,17 +118,17 @@
<file leaf-file-name="POC.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/POC.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="12" column="21" lean-forward="false" selection-start-line="12" selection-start-column="21" selection-end-line="12" selection-end-column="21" />
<state relative-caret-position="1530">
<caret line="102" column="65" lean-forward="false" selection-start-line="102" selection-start-column="65" selection-end-line="102" selection-end-column="65" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Well.java" pinned="false" current-in-tab="true">
<file leaf-file-name="Well.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/Well.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2700">
<state relative-caret-position="770">
<caret line="180" column="38" lean-forward="true" selection-start-line="180" selection-start-column="38" selection-end-line="180" selection-end-column="38" />
<folding>
<element signature="imports" expanded="true" />
@@ -149,6 +137,18 @@
</provider>
</entry>
</file>
<file leaf-file-name="WebServer.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/WebServer.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="380">
<caret line="55" column="0" lean-forward="true" selection-start-line="55" selection-start-column="0" selection-end-line="55" selection-end-column="0" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Measurement.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/Measurement.java">
<provider selected="true" editor-type-id="text-editor">
@@ -748,8 +748,9 @@
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/poc/CLScanner.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/poc/IOControl.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/poc/Database.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/poc/POC.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/poc/Well.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/poc/POC.java" />
<option value="$PROJECT_DIR$/src/main/java/com/henrypump/poc/WebServer.java" />
</list>
</option>
</component>
@@ -770,7 +771,7 @@
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
<navigator proportions="" version="1">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers ProjectPane="true" />
<showModules />
@@ -783,7 +784,65 @@
<manualOrder />
<foldersAlwaysOnTop value="true" />
</navigator>
<panes />
<panes>
<pane id="PackagesPane" />
<pane id="Scratches" />
<pane id="ProjectPane">
<subPane>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="poc-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="POC-Java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="poc-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="POC-Java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="poc-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="POC-Java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="main" />
<option name="myItemType" value="org.jetbrains.plugins.gradle.projectView.GradleTreeStructureProvider$GradleSourceSetDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="poc" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
@@ -791,6 +850,7 @@
<property name="project.structure.proportion" value="0.15" />
<property name="project.structure.side.proportion" value="0.2" />
<property name="settings.editor.selected.configurable" value="reference.settings.project.maven.repository.indices" />
<property name="SearchEverywhereHistoryKey" value="&#9;FILE&#9;file:///Users/patrickjmcd/Henry_Pump/POC-Java/src/main/java/com/henrypump/poc/Well.java" />
</component>
<component name="RunManager" selected="Application.POC">
<configuration default="false" name="POC" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
@@ -1057,7 +1117,7 @@
</component>
<component name="ToolWindowManager">
<frame x="0" y="23" width="1680" height="959" extended-state="6" />
<editor active="false" />
<editor active="true" />
<layout>
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
@@ -1073,8 +1133,8 @@
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
<window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.19382322" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Gradle" active="true" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32967034" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.1935287" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Gradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32967034" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.24973376" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
@@ -1114,9 +1174,9 @@
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32921347" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32960895" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.19382322" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.1935287" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32960895" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Gradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32985258" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Gradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32967034" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="true" content_ui="tabs" />
</layout-to-restore>
@@ -1135,16 +1195,6 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/Well.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/WellTest.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="675">
@@ -1800,19 +1850,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/IOControl.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="105">
<caret line="7" column="26" lean-forward="false" selection-start-line="7" selection-start-column="26" selection-end-line="7" selection-end-column="26" />
<folding>
<element signature="e#754#755#0" expanded="false" />
<element signature="e#803#804#0" expanded="false" />
<element signature="e#833#834#0" expanded="false" />
<element signature="e#881#882#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/barneyWell.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="15">
@@ -1829,14 +1866,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/POC.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="12" column="21" lean-forward="false" selection-start-line="12" selection-start-column="21" selection-end-line="12" selection-end-column="21" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/startup.sh">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="30">
@@ -1857,7 +1886,7 @@
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/Well.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2700">
<state relative-caret-position="770">
<caret line="180" column="38" lean-forward="true" selection-start-line="180" selection-start-column="38" selection-end-line="180" selection-end-column="38" />
<folding>
<element signature="imports" expanded="true" />
@@ -1865,6 +1894,32 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/IOControl.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="915">
<caret line="69" column="5" lean-forward="true" selection-start-line="50" selection-start-column="4" selection-end-line="69" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/POC.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1530">
<caret line="102" column="65" lean-forward="false" selection-start-line="102" selection-start-column="65" selection-end-line="102" selection-end-column="65" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/henrypump/poc/WebServer.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="380">
<caret line="55" column="0" lean-forward="true" selection-start-line="55" selection-start-column="0" selection-end-line="55" selection-end-column="0" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>

View File

@@ -90,9 +90,21 @@ public class POC implements Runnable{
if (args.length < 2){
final POC realPOC = new POC(dbHostname);
try {
WebServer httpServer = new WebServer(8000, realPOC);
} catch (Exception e){
System.out.println("problem starting web server");
System.out.println(e);
}
realPOC.start();
} else {
final POC simPOC = new POC(args[0], args[1].equals("true"), dbHostname);
try {
WebServer httpServer = new WebServer(8000, simPOC);
} catch (Exception e){
System.out.println("problem starting web server");
System.out.println(e);
}
simPOC.start();
}

View File

@@ -0,0 +1,85 @@
package com.henrypump.poc;
import java.io.*;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import org.json.simple.JSONObject;
/**
* Created by patrickjmcd on 2/28/17.
*/
public class WebServer{
private POC attachedPOC;
private int port;
WebServer(int port, POC attachedPOC) throws Exception {
this.attachedPOC = attachedPOC;
this.port = port;
HttpServer server = HttpServer.create(new InetSocketAddress(port), 0);
server.createContext("/cmd/start", new StartHandler());
server.createContext("/cmd/stop", new StopHandler());
server.createContext("/sts", new StatusHandler());
server.createContext("/cmd/updateconfig", new UpdateConfigHandler());
server.setExecutor(null); // creates a default executor
server.start();
}
class StartHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
attachedPOC.thisWell.start("webserver");
String response = attachedPOC.thisWell.getRunStatusString();
t.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
class StopHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
attachedPOC.thisWell.stop("webserver");
String response = attachedPOC.thisWell.getRunStatusString();
t.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
class StatusHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
String response = attachedPOC.thisWell.getRunStatusString();
t.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
class UpdateConfigHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
attachedPOC.thisWell.getWellSetup();
JSONObject respJSON = new JSONObject();
respJSON.put("status", "OK");
String response = respJSON.toJSONString();
t.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}

View File

@@ -157,5 +157,7 @@ def main(global_config, **settings):
config.add_route('json_singlevaluebetween', "/json/values/tag/{tagname}")
config.add_route("json_singlevaluedaterange", "/json/values/tag/{tagname}/daterange")
config.add_route("json_updateconfig", "/json/updateconfig")
config.scan()
return config.make_wsgi_app()

View File

@@ -113,3 +113,8 @@ def json_runstatusnow(request):
pass
return {'runstatus': status}
@view_config(route_name="json_updateconfig", renderer="prettyjson", request_method='POST')
def json_updateconfig(request):
return {'POST': request.json_body}

View File

@@ -19,7 +19,7 @@
<div class="form-group">
<label for="pumpDiameter">Pump Diameter</label>
<input type="number" class="form-control" id="pumpDiameter" value="{{config.pumpDiameter}}" step="0.001" min="0.001" max="0.2">
<input type="number" class="form-control" id="pumpDiameter" value="{{config.pumpDiameter}}" step="0.001" min="0.001" max="10">
</div>
<div class="form-group">
@@ -29,40 +29,124 @@
<div class="form-group">
<label for="tubingID">Tubing ID</label>
<input type="number" class="form-control" id="tubingID" value="{{config.tubingID}}" step="0.001" min="0.001" max="0.2">
<input type="number" class="form-control" id="tubingID" value="{{config.tubingID}}" step="0.001" min="0.001" max="24">
</div>
<div class="form-group">
<label for="tubingOD">Tubing OD</label>
<input type="number" class="form-control" id="tubingOD" value="{{config.tubingOD}}" step="0.001" min="0.001" max="0.2">
<input type="number" class="form-control" id="tubingOD" value="{{config.tubingOD}}" step="0.001" min="0.001" max="24">
</div>
<div class="form-group">
<label for="tubingAnchorDepth">Tubing Anchor Depth</label>
<input type="number" class="form-control" id="tubingAnchorDepth" value="{{config.tubingAnchorDepth}}" step="0.001" min="0.001" max="0.2">
<input type="number" class="form-control" id="tubingAnchorDepth" value="{{config.tubingAnchorDepth}}" step="0.001" min="0.001">
</div>
<div class="form-group">
<label for="structuralRating">Structural Rating</label>
<input type="number" class="form-control" id="structuralRating" value="{{config.structuralRating}}" step="0.001" min="0.001" max="0.2">
<input type="number" class="form-control" id="structuralRating" value="{{config.structuralRating}}" step="0.001" min="0.001">
</div>
<div class="form-group">
<label for="stuffingBoxFriction">Stuffing Box Friction</label>
<input type="number" class="form-control" id="stuffingBoxFriction" value="{{config.stuffingBoxFriction}}" step="0.5" min="0.0" max="1000">
<input type="number" class="form-control" id="stuffingBoxFriction" value="{{config.stuffingBoxFriction}}" step="0.5" min="0.0">
</div>
<div class="form-group">
<label for="tubingHeadPressure">Tubing Head Pressure</label>
<input type="number" class="form-control" id="tubingHeadPressure" value="{{config.tubingHeadPressure}}" step="0.001" min="0.001" max="0.2">
<input type="number" class="form-control" id="tubingHeadPressure" value="{{config.tubingHeadPressure}}" step="0.001" min="0.0">
</div>
<div class="form-group">
<label for="storedBy">Last Stored By</label>
<input type="text" class="form-control disabled" id="storedBy" value="{{config.storedBy}}" disabled>
</div>
<button type="submit" class="btn btn-default">Submit</button>
<h2>Taper Setup</h2>
<div class="table table-responsive">
<table class="table">
<thead>
<tr>
<th>Taper</th>
<th>Length</th>
<th>Diameter</th>
<th>Material</th>
<th>Damping Factor</th>
</tr>
</thead>
<tbody>
{% for taper in config.tapers %}
<tr>
<td class="taper-number">{{loop.index}}</td>
<td><input type="number" class="form-control" id="taper-{{loop.index}}-length" value="{{taper.length}}" /></td>
<td><input type="number" class="form-control" id="taper-{{loop.index}}-diameter" value="{{taper.diameter}}" /></td>
<td><select class="form-control" id="taper-{{loop.index}}-material" value="{{taper.material}}"><option value="steel">Steel</option><option value="fiberglass">Fiberglass</option></select></td>
<!-- <td><input type="text" class="form-control" id="taper-{{loop.index}}-material" value="{{taper.material}}" /></td> -->
<td><input type="number" class="form-control" id="taper-{{loop.index}}-dampingFactor" value="{{taper.dampingFactor}}" /></td>
</tr>
{% endfor %}
<span id="morerows"></span>
</tbody>
</table>
<button id="add-row" class="btn btn-primary"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add Taper</button>
<button id="submit" class="btn btn-default">Submit</button>
</form>
</div>
</div>
</div>
<script>
$( "#add-row" ).click(function( event ) {
event.preventDefault();
var nextTaper = parseInt($(".taper-number").last().text()) + 1;
if(nextTaper <= 10){
var taperHTML = '<tr><td class="taper-number">' + nextTaper + '</td><td><input type="number" class="form-control" id="taper-'+ nextTaper + '-length" value="0.0" /></td><td><input type="number" class="form-control" id="taper-' + nextTaper + '-diameter" value="0.0" /></td><td><select class="form-control" id="taper-' + nextTaper + '-material" value=""><option value="steel">Steel</option><option value="fiberglass">Fiberglass</option></select></td><td><input type="number" class="form-control" id="taper-' + nextTaper + '-dampingFactor" value="0.0" /></td></tr>';
$("tbody").append(taperHTML);
}
});
function printOut(data){
console.log(data);
}
$("#submit").click(function(event){
event.preventDefault();
var newObject = {};
newObject.wellName = $("#wellName").val();
newObject.deltaT = parseFloat($("#deltaT").val());
newObject.pumpDiameter = parseFloat($("#pumpDiameter").val());
newObject.fluidGradient = parseFloat($("#fluidGradient").val());
newObject.tubingID = parseFloat($("#tubingID").val());
newObject.tubingOD = parseFloat($("#tubingOD").val());
newObject.tubingAnchorDepth = parseFloat($("#tubingAnchorDepth").val());
newObject.structuralRating = parseFloat($("#structuralRating").val());
newObject.stuffingBoxFriction = parseFloat($("#stuffingBoxFriction").val());
newObject.tubingHeadPressure = parseFloat($("#tubingHeadPressure").val());
var taperList = [];
var lastTaper = parseInt($(".taper-number").last().text())
for (var i = 1; i <= lastTaper; i++){
taperList.push({
length: parseFloat($("#taper-" + i + "-length").val()),
diameter: parseFloat($("#taper-" + i + "-diameter").val()),
material: $("#taper-" + i + "-material").val(),
dampingFactor: parseFloat($("#taper-" + i + "-dampingFactor").val()),
})
}
newObject.tapers = taperList;
$.ajax({
type: "POST",
dataType: 'json',
data: JSON.stringify(newObject),
contentType: "application/json; charset=utf-8",
url: "/json/updateconfig",
success: printOut
});
})
</script>
{% endblock content %}