Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
642
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.79 KB | None | 0 0
  1. <body>
  2. <h1>Debug Cockpit</h1>
  3. <h4>Add database<h4/>
  4. <p>
  5. <h5>Add Default</h5>
  6. <button id="add_db_citadelle">Add default citadelle</button>
  7. <button id="add_db_york">Add default york</button>
  8. <button id="add_db_aurora">Add default aurora</button>
  9. </p>
  10. <p>
  11. <p><input id="number_workers" type="text" value=""> (Number Workers)<p/>
  12. <p><input id="db_id" type="text" value=""> (id) <p/>
  13. <p><input id="user" type="text" value=""> (User)<p/>
  14. <p><input id="password" type="text" value=""> (Password) <p/>
  15. <p><input id="host" type="text" value=""> (Host) <p/>
  16. <p><input id="port" type="text" value=""> (Port) <p/>
  17. <p><input id="dbname" type="text" value=""> (Database name) <p/>
  18. <button id="add_db_button">Add database</button>
  19. <p/>
  20.  
  21. <h4>Start Workload</h4>
  22. (mixed, no-ops)
  23. <p>
  24. <p><input type="text" id="workload_type" value=""> (Workload Type)</p>
  25. <p><input type="text" id="workload_factor" value=""> (Workload Factor)</p>
  26. <button id="execute_workload_button">Execute Workload</button>
  27. </p>
  28.  
  29. <h4>Databases</h4>
  30. <p id="databases"></p>
  31. <script type="text/javascript">
  32.  
  33. //let MONITOR_URL = "http://vm-york.eaalab.hpi.uni-potsdam.de:8000"
  34. let MONITOR_URL = "http://0.0.0.0:8000"
  35.  
  36. let active_databases = new Map();
  37.  
  38. //https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
  39. async function postData(url = '', data = {}, type = 'POST') {
  40. // Default options are marked with *
  41. const response = await fetch(url, {
  42. method: type, // *GET, POST, PUT, DELETE, etc.
  43. mode: 'cors', // no-cors, *cors, same-origin
  44. cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
  45. credentials: 'same-origin', // include, *same-origin, omit
  46. headers: {
  47. 'Content-Type': 'application/json'
  48.  
  49. // 'Content-Type': 'application/x-www-form-urlencoded',
  50. },
  51. redirect: 'follow', // manual, *follow, error
  52. referrer: 'no-referrer', // no-referrer, *client
  53. body: JSON.stringify(data) // body data type must match "Content-Type" header
  54. });
  55. return await response.json(); // parses JSON response into native JavaScript objects
  56. }
  57.  
  58. function createDatabaseDomElement(database_id){
  59. let database_elem = document.createElement("div");
  60. database_elem.setAttribute("id", database_id);
  61. database_elem.style = "border:1px solid black";
  62. database_elem.style.width = "200px";
  63.  
  64. database_name = document.createElement("div");
  65. database_name.innerHTML = database_id;
  66.  
  67. database_throughput = document.createElement("div");
  68. database_throughput.innerHTML = "Throughput: "
  69. + active_databases.get(database_id)["throughput"];
  70. database_throughput.setAttribute("id", database_id + "_throughput");
  71.  
  72. remove_button = document.createElement("BUTTON");
  73. remove_button.innerHTML = "Remove Database";
  74.  
  75. remove_button.addEventListener("click", () => {
  76. deregisterDatabase({"id": database_id});
  77. })
  78.  
  79. database_elem.appendChild(database_name);
  80. database_elem.appendChild(database_throughput);
  81. database_elem.appendChild(remove_button);
  82.  
  83. let parent = document.getElementById("databases");
  84. parent.appendChild(database_elem);
  85. }
  86.  
  87. function addNewDatabases(database_id){
  88. active_databases.set(database_id, {"throughput": 0});
  89. createDatabaseDomElement(database_id);
  90. }
  91.  
  92. function deleteDatabase(database_id){
  93. document.getElementById(database_id).remove();
  94. active_databases.delete(database_id);
  95. }
  96.  
  97. function checkForNewDatabases(database_ids){
  98. let active_datases = Array.from(active_databases.keys());
  99. for (let i = 0; i < database_ids.length; i++){
  100. if(!(active_datases.includes(database_ids[i]))){
  101. addNewDatabases(database_ids[i]);
  102. }
  103. }
  104. }
  105.  
  106. function removeSingleDatabase(database_id){
  107. let parent = document.getElementById("databases");
  108. let database_elem = document.getElementById(database_id);
  109. parent.removeChild(database_elem);
  110. active_databases.delete(database_id);
  111. }
  112.  
  113. function removeOldDatabases(database_ids){
  114. for (database_id in active_databases.keys()){
  115. if(!(database_ids.includes(database_id))){
  116. removeSingleDatabase(database_id);
  117. }
  118. }
  119. }
  120.  
  121. async function updateDatabases(url){
  122. const response = await fetch(url);
  123. let data = await response.json();
  124. let database_ids = data["body"]["databases"];
  125. checkForNewDatabases(database_ids);
  126. removeOldDatabases(database_ids);
  127. }
  128.  
  129. async function registerNewDatabase(json) {
  130. const response = await postData(MONITOR_URL + '/database', json);
  131.  
  132. if (response["header"]["status"] != 200) {
  133. window.alert(response["body"]);
  134. return 0;
  135. }
  136. addNewDatabases(json["id"]);
  137. }
  138.  
  139. async function deregisterDatabase(json){
  140. const response = await postData(MONITOR_URL + '/database', json, 'DELETE');
  141.  
  142. if (response["header"]["status"] != 200) {
  143. window.alert(response["header"]["message"]);
  144. return 0;
  145. }
  146. deleteDatabase(json["id"]);
  147. }
  148.  
  149. async function updateThroughput(url){
  150. //ToDo itterate over throughput and update
  151. const response = await fetch(url);
  152. let data = await response.json()
  153. let databases = data["body"]["throughput"]
  154. let active_datases = Array.from(active_databases.keys());
  155. for (let database_id in databases){
  156. if(active_datases.includes(database_id)){
  157. let value = databases[database_id];
  158. active_databases.get(database_id)["throughput"] = value;
  159. document.getElementById(database_id+"_throughput").innerHTML = ("Throughput: " + value);
  160. }
  161. }
  162.  
  163. }
  164.  
  165. async function execute_workload(json){
  166. const response = await postData(MONITOR_URL + '/workload', json, 'POST');
  167. if (response["header"]["status"] != 200) {
  168. window.alert(response["body"]["error"]);
  169. return 0;
  170. }
  171. }
  172.  
  173. function getFormValuesWorkload(){
  174. let json = {
  175. "header": {
  176. "message": "workload"
  177. },
  178. "body": {
  179. "type": document.getElementById('workload_type').value,
  180. "factor": Number(document.getElementById('workload_factor').value)
  181. }
  182. }
  183. return json;
  184. }
  185.  
  186. function getFormValuesDatabase(){
  187. let json = {
  188. "number_workers" : document.getElementById('number_workers').value,
  189. "id": document.getElementById('db_id').value,
  190. "user": document.getElementById('user').value,
  191. "password": document.getElementById('password').value,
  192. "host": document.getElementById('host').value,
  193. "port": document.getElementById('port').value,
  194. "dbname": document.getElementById('dbname').value,
  195. }
  196. return json;
  197. }
  198.  
  199. document.getElementById("add_db_citadelle").addEventListener("click", () => {
  200. let citadelle = {
  201. "number_workers" : "8",
  202. "id": "citadelle",
  203. "user": "serviceuser",
  204. "password": "serviceuser",
  205. "host": "vm-citadelle.eaalab.hpi.uni-potsdam.de",
  206. "port": "5432",
  207. "dbname": "postgres"
  208. }
  209. registerNewDatabase(citadelle)
  210. });
  211.  
  212. document.getElementById("add_db_york").addEventListener("click", () => {
  213. let york = {
  214. "number_workers" : "8",
  215. "id": "york",
  216. "user": "serviceuser",
  217. "password": "serviceuser",
  218. "host": "vm-york.eaalab.hpi.uni-potsdam.de",
  219. "port": "5432",
  220. "dbname": "postgres"
  221. }
  222. registerNewDatabase(york);
  223. });
  224.  
  225. document.getElementById("add_db_aurora").addEventListener("click", () => {
  226. let aurora = {
  227. "number_workers" : "8",
  228. "id": "aurora",
  229. "user": "serviceuser",
  230. "password": "serviceuser",
  231. "host": "vm-aurora.eaalab.hpi.uni-potsdam.de",
  232. "port": "5432",
  233. "dbname": "postgres"
  234. }
  235. registerNewDatabase(aurora);
  236. });
  237.  
  238. document.getElementById("add_db_button").addEventListener("click", () => {
  239. registerNewDatabase(getFormValuesDatabase());
  240. })
  241.  
  242. document.getElementById("execute_workload_button").addEventListener("click", () => {
  243. execute_workload(getFormValuesWorkload());
  244. })
  245.  
  246. setInterval(() => {
  247. updateDatabases(MONITOR_URL + "/database");
  248. updateThroughput(MONITOR_URL + "/throughput");
  249. }, 1000);
  250.  
  251. </script>
  252. </body>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement