Vue App
\ No newline at end of file
+Vue App
\ No newline at end of file
diff --git a/dist/js/app.9b48d8ee.js b/dist/js/app.9b48d8ee.js
new file mode 100644
index 0000000..e36438b
--- /dev/null
+++ b/dist/js/app.9b48d8ee.js
@@ -0,0 +1,2 @@
+(function(t){function e(e){for(var s,n,r=e[0],l=e[1],c=e[2],u=0,p=[];uName',sortField:"name",titleClass:"text-center aligned",visible:!0,dataClass:"center aligned",width:"20%"},{name:"nodeid",title:'nodeid',titleClass:"text-center aligned",sortField:"nodeid",visible:!0,width:"20%"},{name:"ip",title:'IP',titleClass:"text-center aligned",sortField:"swarmlabname",visible:!0,width:"13%"},{name:"role",title:'Role',titleClass:"text-center aligned",sortField:"role",visible:!0,width:"15%",formatter(t){const e=/^ondemand_playground/.test(t);if(e){var a='
";this.$swal({type:"info",html:i+s,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0})}else if("register"==t){console.log("start "+JSON.stringify("register"));s="Before you begin\n \n Before you start using the Swarmlab Hybrid API, you need a hybrid enabled account and the Swarmlab API enabled. \n \n To learn more, see Get Started with Hybrid Platform. \n ",i="
You can connect to the same contained process multiple times simultaneously, from different sessions on the Docker host. \n \n Open a terminal and Run:\n \n \n";r+=i?"docker exec -it -u"+n+" "+this.hybridshowdata.Names+" "+s:"docker exec -it "+this.hybridshowdata.Names+" "+s,r+=" ",r+=" ",r+=" Directory Maps",r+="
",r+="
Local
Container
";for(var l=a.data.test[0],c=0;c
"+l[c].Source+"
"+l[c].Destination+"
");r+="
",r+=" ",this.$swal({type:"Info",title:"Info!",icon:"info",html:r,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,cancelButtonText:"No, cancel!",showCancelButton:!1,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0,confirmButtonText:"Ok!"})}else if("install"==t){e={action:"up"};e.token=this.token,e.swarmlabname=this.swarmlabname,e.git=this.swarmlabname_git,this.$socket.client.open(),this.$socket.client.emit("install",e)}else"container-stop"==t?(this.$root.$emit("SERVER_hybrid_table_start"),this.$socket.client.emit("container-stop",this.swarmlabname,this.hybridshowdata.ID)):"create-wirequard"==t?this.$socket.client.emit("create-wirequard",this.token):"stop"==t&&this.$socket.client.emit("stop",this.swarmlabname)},async socketopen(){this.$socket.client.open(),this.$socket.client.connect()},async socketauthenticate(){this.$socket.client.emit("authenticate",this.token)},async socketreconnect(){await this.socketopen();this.socketauthenticate()},async socketclose(){this.$socket.client.close()}},sockets:{connect(){console.log("socket connected socketdatasend"),this.issocket="open";f.dispatch("pipelineLLO/setsocketStatus",{status:"open"})},error(t){console.log("socket error "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"})},connect_error(t){console.log("socket connect_error "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"});this.socketopen(),this.socketreconnect()},disconnect(t){console.log("socket disconnect "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"});this.socketreconnect()},connect_timeout(t){console.log("socket timeout "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"});this.socketreconnect()},reconnect(t){console.log("socket reconnect attemptNumber "+JSON.stringify(t)),this.socketreconnect()},reconnect_attempt(t){console.log("socket reconnect_attempt "+JSON.stringify(t)),this.socketreconnect()},reconnecting(t){console.log("socket reconnecting "+JSON.stringify(t)),this.socketreconnect()},reconnect_error(t){console.log("socket reconnect_error "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"});this.socketreconnect()},unauthorized(t){console.log("socket unauthorized "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"})},socket_id_emit(t){console.log("socket id from server "+JSON.stringify(t)),this.issocket="open";f.dispatch("pipelineLLO/setsocketStatus",{status:"open"})},async logdata(t){console.log(" socket from logdata "+JSON.stringify(t));f.dispatch("pipelineLLO/addlog",{log:t});var e=f.getters["pipelineLLO/getlog"];this.log_path=[...new Set(e.map(t=>t.tailed_path))];var a="";for(let i of this.log_path)if(a=e.filter(t=>t.tailed_path===i).length,s["default"].set(this.log_path_lenght,i,a),a>this.loglenghttotal)f.dispatch("pipelineLLO/taillog",{path:i})},async message(t){console.log(" socket message "+JSON.stringify(t))},async message_config(t){t.data=JSON.parse(t.data),"ok"==t.file?(console.log("server-value-file-ok "+JSON.stringify(t.data.status)),this.CONFIG.status=t.data.status,this.CONFIG.workerkey=t.data.workerkey,this.CONFIG.swarmlab_public_wgkey=t.data.swarmlab_public_wgkey,this.CONFIG.server_ip=t.data.server_ip,this.CONFIG.allowed_ips=t.data.allowed_ips,this.CONFIG.wg_port=t.data.wg_port,this.CONFIG.wg_ip=t.data.wg_ip,this.CONFIG.swarm_ip=t.data.swarm_ip,this.CONFIG.privatekey=t.data.privatekey,this.CONFIG.publickey=t.data.publickey):"nodata"==t.file&&(this.CONFIG.status="",this.CONFIG.workerkey="",this.CONFIG.swarmlab_public_wgkey="",this.CONFIG.server_ip="",this.CONFIG.allowed_ips="",this.CONFIG.wg_port="",this.CONFIG.wg_ip="",this.CONFIG.swarm_ip="",this.CONFIG.privatekey="",this.CONFIG.publickey=""),console.log("server-config "+JSON.stringify(this.CONFIG)),f.dispatch("pipelineLLO/addconfig",this.CONFIG),this.$root.$emit("hybrid_connect_server_view",this.CONFIG)},async message_out(t){console.log(" socket out "+JSON.stringify(t)),this.$root.$emit("hybrid_log_in",t),this.$root.$emit("SERVER_hybrid_table_start"),this.hybridshowdata={}},async message_err(t){console.log(" socket err "+JSON.stringify(t)),this.$root.$emit("hybrid_log_in",t)},async message_close(t){console.log(" socket close "+JSON.stringify(t)),this.$root.$emit("hybrid_log_in",t),this.$root.$emit("hybrid_refresh_table"),this.$root.$emit("SERVER_hybrid_table_stop")},async message_hybrid_status(t){var e={};e.status=t;f.dispatch("pipelineLLO/setstatus",e);this.$root.$emit("hybrid_server_status",t),this.STATUS.swarmlabid=t.data.swarmlabid,this.STATUS.hybrid=t.data.hybrid,this.STATUS.swarmlab=t.data.swarmlab,f.dispatch("pipelineLLO/addstatusswarmlab",this.STATUS)}},actions:{}},X=Z,tt=(a("4cf0"),Object(O["a"])(X,W,H,!1,null,null,null)),et=tt.exports,at=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("card",{staticClass:"card-user",staticStyle:{"max-height":"100%"}},[s("div",{staticClass:"author"},[s("img",{staticClass:"avatar border-white",attrs:{src:a("3606"),alt:"..."}})]),s("b-container",{staticClass:"bv-example-row",attrs:{fluid:""}},[s("div",{staticClass:" col text-center"},[s("v-wait",{attrs:{for:"myRunInstance1"}},[s("template",{slot:"waiting"},[s("div",[s("img",{attrs:{src:a("cf1c"),width:"50",height:"50"}}),t._v(" Lab_Instance... ")])])],2),t.extenderror?s("button",{staticClass:"btn btn-outline-danger btn-sm",attrs:{type:"button",round:""},on:{click:function(e){return t.runextenderror()}}},[t._v(" Error: max depth exceeded")]):t._e(),t.tryConsole?s("button",{staticClass:"btn btn-outline-warning btn-sm",attrs:{type:"button",round:""},on:{click:function(e){return t.clear()}}},[t._v(" Clear")]):t._e(),s("button",{staticClass:"btn btn-outline-info btn-sm",attrs:{type:"button",round:"",disabled:""}},[t._v(" Console")]),"sublime"==t.cmOptions.keyMap?s("button",{staticClass:"btn btn-outline-info btn-sm",attrs:{type:"button",round:""},on:{click:t.infoFilter}},[t._v(" i")]):t._e()],1),s("div",{staticClass:"codemirror"},[s("codemirror",{ref:"myCm",attrs:{value:t.code,options:t.cmOptions},on:{cursorActivity:t.onCmCursorActivity,ready:t.onCmReady,focus:t.onCmFocus,input:t.onCmCodeChange}})],1)])],1)},st=[],it=a("8f94"),ot=(a("c4e3"),a("21a6"),a("a7be"),a("eb8f"),a("b866"),a("31c5"),a("9b74"),a("f6b6"),a("3c98"),a("9c7b"),a("715d"),a("b933"),a("23de"),a("02f0"),a("8c33"),a("7289"),a("2aed"),a("d72f"),a("0b6c"),a("9a48"),a("75f8"),a("697e"),a("aedd"),a("164b"),a("4895"),a("cbc8"),a("8d70"),a("9f09"),a("a2c1"),a("56b3"),a("d7d5"),{components:{card:N,codemirror:it["codemirror"]},data(){return{socketonline:!1,extenderror:!1,tryConsole:!1,ssl:{},getinfo:"",token:"",swarmlabname:"",code:"",editchoice:"",optionsedit:[{text:"code",value:"code"},{text:"text",value:"text"}],llodesc:[{llo_url:"",llo_name:"",llo_author:"",llo_intro:""}],llo:[{id:0,rm:!1,data_info:"Asciidoc \n",data_code:"#Your source code",data_service:"",code_datafile:"url",code_name:"",code_exec:"",code_options:"",code_mime:"",code_info:"",code_code:"",code_codeout:"",code_codeoutput:"console",points:"",challenge_question:"",code_challenge_question:"",challenge_answer:"",challenge_answer_hint:"",code_challenge_answer_hint:"",challenge_answer_source:"",challenge_answer_code_out:"",challenge_answer_code:"",code_challenge_answer_code:""}],searchLLO:[],searchLLOactive:!1,ADOC_html_code:"",challenge:[],action:"",tryLLO:[],service:"os2",active:0,activecount:0,remove:"",activeField:"",bootstrap:!1,firstbootstrap:0,htmlasciitmp:"",datafile:"https://git.swarmlab.io:3000/labs/examples-mpi2/raw/branch/master/0_netstat/data",datadir:"0_netstat/data",LearningObject:"",showllo:!0,showlloedit:!0,selected:"sublime",options:[{text:"vim",value:"vim"},{text:"sublime",value:"sublime"}],optionsmime:[{text:"sh",value:"bash"},{text:"javascript",value:"javascript"},{text:"python",value:"python"},{text:"php",value:"php"},{text:"sql",value:"sq;"},{text:"xml",value:"xml"},{text:"c",value:"c"}],pValidate:!1,cmOptions:{tabSize:2,styleActiveLine:!0,lineNumbers:!1,lineSeparator:"\n",line:!0,foldGutter:!0,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],highlightSelectionMatches:{showToken:/\w/,annotateScrollbar:!0},styleSelectedText:!0,mode:"shell",hintOptions:{completeSingle:!1},keyMap:"sublime",matchBrackets:!0,showCursorWhenSelecting:!0,indentUnit:this.ADOC_html_code,lineWrapping:!0,theme:"idea",refresh:!0,readOnly:!0,autofocus:!1,extraKeys:{Ctrl:"autocomplete"}},ADOC_html:[]}},methods:{socketconnect(){this.$root.$emit("SERVER_socket_connect")},clear(){this.tryConsole=!1,this.code=""},async getdata(){var t=this.getinfo;await f.dispatch("pipelineLLO/get_data",{code:t})},async showactive(t){this.topwindow(t)},onCmReady(t){t.on("change",(t,e)=>{}),t.on("keypress",()=>{t.showHint({completeSingle:!1})})},onCmCursorActivity(t,e,a){},onCmFocus(t){},onCmCodeChange(t){this.code=t},handleChange(){},setKeymap(){this.cmOptions.keyMap=this.selected},infoFilter(){var t="
\n The current limit of 125 layers is due to the kernel\'s ARG_MAX, which limits the number of arguments / length of arguments that can be passed when mounting the layers \n \n (this limit can be raised in kernels, but is not something that could be relied on as it would make those images non-interoperable on systems that don\'t have the custom configuration)\n
\n
\n Note that not every step in a Dockerfile creates a new layer, only (RUN) steps that modify the filesystem will introduce a new layer.\n
\n\n
\n
Solution
\n \n
\n Delete all local docker images related to your dockerfile using the following:\n \n \n docker rmi -f $(docker images -a -q)\n
\n\n
\n
Description
\n \n Remove unused image \n - all images not referenced by any container -\n \n
";this.$swal({type:t,html:s+a,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,cancelButtonText:"No, cancel!",showCancelButton:!1,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0,confirmButtonText:"Ok!"})},setFilter(){this.moreParams={filter:this.searchFor,type:this.selected},s["default"].nextTick(()=>this.$refs.vuetable.refresh())},resetFilter(){this.moreParams={},this.searchFor="",s["default"].nextTick(()=>this.$refs.vuetable.refresh())},onPaginationData(t){this.$refs.pagination.setPaginationData(t),this.$refs.paginationInfo.setPaginationData(t)},onChangePage(t){this.$refs.vuetable.changePage(t)},editRow(t){alert("You clicked edit on"+JSON.stringify(t))},async onAction(t,e,a){this.actionrowindex=a,console.log("index "+this.actionrowindex),"view-item"==t||("run-more"==t?(this.hybridshowdata=e,console.log("hybrid "+JSON.stringify(e))):"delete-item"==t&&this.$swal({type:"info",html:info+winfo,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,cancelButtonText:"No, cancel!",showCancelButton:!0,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0,confirmButtonText:"Yes, Delete it!"}))},refreshVuetable(){this.$nextTick(()=>{this.vuetablekey+=1})},playbookinfoShow(t){return this.visibility[t]=!0},playbookinfo(t){return this.playbookInfo=t},rowClicked(t,e){return{html:!0,title:()=>"Hello Popover: "+ ++this.counter,content:()=>"The date is: "+new Date+""}},loadsuccess(t){var e=t.data.data;this.fielddata=e;e.length},onLoadError(t){"401"==t.response.status&&(window.location.href="https://api-login.swarmlab.io:8089",s["default"].nextTick(()=>window.location.href="https://api-login.swarmlab.io:8089"))}},actions:{}},$t=Et,Pt=(a("4788"),Object(O["a"])($t,Dt,Bt,!1,null,null,null)),Gt=Pt.exports,Vt={components:{card:N,MyconnectManageServer:Gt},data(){return{loading:!1,consoleView:"off",productIndex:1}},mounted(){},beforeDestroy(){},created(){}},Tt=Vt,Jt=Object(O["a"])(Tt,Rt,Ft,!1,null,null,null),Mt=Jt.exports,jt=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("card",{staticClass:"card-user",staticStyle:{"max-height":"100%"}},[a("div",{staticClass:"row"},[a("div",{staticClass:"col-6 order-first "},[a("br"),a("mydeploy-manage-bootstrap")],1),a("div",{staticClass:"col-6 order-last"},[a("br"),a("mydeploy-manage-view")],1)])])},zt=[],Yt=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("card",{staticClass:"card-user",staticStyle:{"max-height":"100%"}},[s("div",{staticClass:"author"},[s("img",{staticClass:"avatar border-white",attrs:{src:a("0ed5"),alt:"..."}})]),s("b-container",{staticClass:"bv-example-row",attrs:{fluid:""}},[s("div",{staticClass:"row text-center"},[s("div",{staticClass:"col-12"},[s("b",[t._v("Swarmlab hybrid Deploy")])])]),s("br"),s("b-row",[s("b-col",{attrs:{cols:"8"}},[s("ValidationProvider",{ref:"hybrid_image",attrs:{name:"Image",rules:"required|alpha_num_image"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.image,expression:"deploy.image"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.image,"is-invalid":2==t.isDeployValid.image},attrs:{type:"text",name:"Image","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Image"},domProps:{value:t.deploy.image},on:{keyup:function(e){return t.isValid("image")},input:function(e){e.target.composing||t.$set(t.deploy,"image",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("image")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1),s("b-col",{attrs:{cols:"4"}},[s("ValidationProvider",{ref:"hybrid_stackname",attrs:{name:"StackName",rules:"required|alpha_num_name"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.stackname,expression:"deploy.stackname"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.stackname,"is-invalid":2==t.isDeployValid.stackname},attrs:{type:"text",name:"StackName","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"StackName"},domProps:{value:t.deploy.stackname},on:{keyup:function(e){return t.isValid("stackname")},input:function(e){e.target.composing||t.$set(t.deploy,"stackname",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("stackname")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1)],1),s("b-row",[s("b-col",{attrs:{cols:"8"}},[s("ValidationProvider",{ref:"hybrid_name",attrs:{name:"Name",rules:"required|alpha_num_name"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.name,expression:"deploy.name"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.name,"is-invalid":2==t.isDeployValid.name},attrs:{type:"HybridError",name:"Name","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Name"},domProps:{value:t.deploy.name},on:{keyup:function(e){return t.isValid("name")},input:function(e){e.target.composing||t.$set(t.deploy,"name",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("name")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1),s("b-col",{attrs:{cols:"4"}},[s("ValidationProvider",{ref:"hybrid_network",attrs:{name:"Network",rules:"required|alpha_num_name"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.network,expression:"deploy.network"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.network,"is-invalid":2==t.isDeployValid.network},attrs:{type:"text",name:"Network","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Network Name"},domProps:{value:t.deploy.network},on:{keyup:function(e){return t.isValid("network")},input:function(e){e.target.composing||t.$set(t.deploy,"network",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("network")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1)],1),s("b-row",[s("b-col",{attrs:{cols:"4"}},[s("ValidationProvider",{ref:"hybrid_cpu",attrs:{name:"Cpu",rules:"required|alpha_num_cpu"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.cpu,expression:"deploy.cpu"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.cpu,"is-invalid":2==t.isDeployValid.cpu},attrs:{type:"text",name:"Cpu","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Limit CPU e.g. 0.50"},domProps:{value:t.deploy.cpu},on:{keyup:function(e){return t.isValid("cpu")},input:function(e){e.target.composing||t.$set(t.deploy,"cpu",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("cpu")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1),s("b-col",{attrs:{cols:"4"}},[s("ValidationProvider",{ref:"hybrid_memory",attrs:{name:"Memory",rules:"required|alpha_num_memory"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.memory,expression:"deploy.memory"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.memory,"is-invalid":2==t.isDeployValid.memory},attrs:{type:"text",name:"Memory","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Limit Memory e.g. 500"},domProps:{value:t.deploy.memory},on:{keyup:function(e){return t.isValid("memory")},input:function(e){e.target.composing||t.$set(t.deploy,"memory",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("memory")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1),s("b-col",{attrs:{cols:"4"}},[s("ValidationProvider",{ref:"hybrid_networkport",attrs:{name:"Networkport",rules:"mybetween:1,65535"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.networkport,expression:"deploy.networkport"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.networkport,"is-invalid":2==t.isDeployValid.networkport},attrs:{type:"text",name:"Networkport","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Net Port (inside the container)"},domProps:{value:t.deploy.networkport},on:{keyup:function(e){return t.isValid("networkport")},input:function(e){e.target.composing||t.$set(t.deploy,"networkport",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("networkport")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1)],1),s("b-row",[s("b-col",{attrs:{cols:"12"}},[s("ValidationProvider",{ref:"hybrid_url",attrs:{name:"Url",rules:"required|alpha_url"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.url,expression:"deploy.url"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.url,"is-invalid":2==t.isDeployValid.url},attrs:{type:"text",name:"Url","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"link to README file (see info button for more)"},domProps:{value:t.deploy.url},on:{keyup:function(e){return t.isValid("url")},input:function(e){e.target.composing||t.$set(t.deploy,"url",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("url")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1)],1),s("b-row",[s("b-col",{attrs:{cols:"6"}},[s("div",{staticClass:"input-group input-group-sm mb-3"},[s("div",{staticClass:"input-group-prepend"},[s("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button"}},[t._v("Start date ")])]),s("date-picker",{attrs:{type:"date",autocomplete:"off",format:"YYYY-MM-DD",lang:"en"},model:{value:t.deploy.startdate,callback:function(e){t.$set(t.deploy,"startdate",e)},expression:"deploy.startdate"}})],1)]),s("b-col",{attrs:{cols:"6"}},[s("div",{staticClass:"input-group input-group-sm mb-3"},[s("div",{staticClass:"input-group-prepend"},[s("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button"}},[t._v("Start time")])]),s("date-picker",{attrs:{type:"time",format:"HH:mm","show-hour":"","show-minute":"","time-picker-options":t.timePickerOptions,lang:"en"},model:{value:t.deploy.starttime,callback:function(e){t.$set(t.deploy,"starttime",e)},expression:"deploy.starttime"}})],1)])],1),s("b-row",[s("b-col",{attrs:{cols:"6"}},[s("div",{staticClass:"input-group input-group-sm mb-3"},[s("div",{staticClass:"input-group-prepend"},[s("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button"}},[t._v("End date ")])]),s("date-picker",{attrs:{type:"date",autocomplete:"off",format:"YYYY-MM-DD",lang:"en"},model:{value:t.deploy.enddate,callback:function(e){t.$set(t.deploy,"enddate",e)},expression:"deploy.enddate"}})],1)]),s("b-col",{attrs:{cols:"6"}},[s("div",{staticClass:"input-group input-group-sm mb-3"},[s("div",{staticClass:"input-group-prepend"},[s("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button"}},[t._v("End time")])]),s("date-picker",{attrs:{type:"time",format:"HH:mm","show-hour":"","show-minute":"","time-picker-options":t.timePickerOptions,lang:"en"},model:{value:t.deploy.endtime,callback:function(e){t.$set(t.deploy,"endtime",e)},expression:"deploy.endtime"}})],1)])],1),s("b-row",[s("b-col",{attrs:{cols:"6"}},[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("div",{staticClass:"input-group-prepend"},[s("button",{staticClass:"ti-cloud-up btn btn-outline-success",attrs:{round:"",type:"button",title:"Deploy"},on:{click:function(e){return t.add_deploy()}}},[t._v(" Deploy ")])])])]),s("b-col",{attrs:{cols:"2"}}),s("b-col",{attrs:{cols:"4"}},[s("div",{staticClass:"custom-control custom-switch"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.usersjoin,expression:"deploy.usersjoin"}],staticClass:"custom-control-input",attrs:{type:"checkbox",id:"customStack",value:"true","unchecked-value":"false"},domProps:{checked:Array.isArray(t.deploy.usersjoin)?t._i(t.deploy.usersjoin,"true")>-1:t.deploy.usersjoin},on:{change:function(e){var a=t.deploy.usersjoin,s=e.target,i=!!s.checked;if(Array.isArray(a)){var o="true",n=t._i(a,o);s.checked?n<0&&t.$set(t.deploy,"usersjoin",a.concat([o])):n>-1&&t.$set(t.deploy,"usersjoin",a.slice(0,n).concat(a.slice(n+1)))}else t.$set(t.deploy,"usersjoin",i)}}}),s("label",{staticClass:"custom-control-label",attrs:{for:"customStack"}},[t._v("Users can join the lab instance")])])])],1)],1)],1)},Ut=[],qt=a("ec45");a("411c");Object(F["b"])("alpha_num",D["a"]),Object(F["b"])("mybetween",D["b"]),Object(F["b"])("mybetween",{message:"The {_field_} field must be a number: 1-65535"}),Object(F["b"])("alpha_num_image",t=>{var e=new RegExp(/^[A-Za-z0-9\:\.\-\_\/]+$/,"i");return!!e.test(t)||"The {_field_} field may contain alphabetic characters, numbers, colons, hyphens, slashes, dots and underscores"}),Object(F["b"])("alpha_num_name",t=>{var e=new RegExp(/^[A-Za-z0-9]+$/,"i");return!!e.test(t)||"The {_field_} field may contain alphabetic characters and numbers"}),Object(F["b"])("alpha_num_cpu",t=>{var e=new RegExp(/^(?!0\d)\d+(?:\.\d{1})?$/);return!!e.test(t)||"The {_field_} field may contain numbers and dots e.g 0.5"}),Object(F["b"])("alpha_num_memory",t=>{var e=new RegExp(/^[0-9]+$/,"i");return!!e.test(t)||"The {_field_} field may contain numbers e.g 500"}),Object(F["b"])("alpha_url",t=>{var e=new RegExp(/https?:\/\/(git\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/,"i");return!!e.test(t)||"The {_field_} field may contain url"}),Object(F["b"])("required",{...D["c"],message:"This field is required"});var Qt={components:{DatePicker:qt["a"],ValidationProvider:F["a"],card:N},props:{},data(){return{isHybridError:!1,isHybridSuccess:!1,token:"",timePickerOptions:{start:"00:00",step:"00:30",end:"23:30"},deploy:{usersjoin:!0},isDeployValid:{image:3,name:3,stackname:3,network:3,url:3,cpu:3,memory:3},isDeployError:{}}},mounted(){},created(){var t=window.location.href,e=new URL(t);this.token=e.searchParams.get("token")},beforeDestroy(){},computed:{},methods:{async add_deploy(){var t=Object.entries(this.deploy),e=new Promise((e,a)=>{t.forEach((t,a,s)=>{this.isValid(s[a][0]),a===s.length-1&&e()})});e.then(()=>{(async()=>{var t=!0;for(const[a,s]of Object.entries(this.isDeployValid))1!=s&&(t=!1);if(t){await f.dispatch("pipelineLLO/adddeploy",{token:this.token,deploy:this.deploy});this.$root.$emit("hybrid_refresh_bootstrap_view"),console.log("ok");var e='
The deploy process is started
Please wait for it to finish before trying again!
See also in "Manage your deployments" table';this.$swal({type:"Info",title:"Info!",icon:"info",html:e,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,cancelButtonText:"No, cancel!",showCancelButton:!1,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0,confirmButtonText:"Ok!"})}else{e="Missing required fields";this.$swal({type:"Info",title:"Info!",icon:"info",html:e,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,cancelButtonText:"No, cancel!",showCancelButton:!1,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0,confirmButtonText:"Ok!"})}})()})},async showInfo(t){if("image"==t)var e='
To start, we need to have a docker image \n We have built some. You can find it here: Menu "Images"
\n \n \n The field may contain alphabetic characters, numbers, colons, hyphens, slashes, dots and underscores\n';else if("stackname"==t)e="
To start, we need to have a Stack Name \n This will bring up all the services, volumes, networks and everything else in an isolated environment.\n\n \n \n The field may contain alphabetic characters and numbers\n";else if("network"==t)e="
To start, we need to have a Network \n This will bring up all the services, volumes, networks and everything else in an isolated network environment.\n \n \nServices running inside any of this networks containers have access (not limited by any firewall) to all other services.\n \n
\n \n \n The field may contain alphabetic characters and numbers\n\n";else if("url"==t)e="
Git Repo url
\n The location of the file describing your service. (most comonly README) \n \n\n
\n \n \n The field may contain any valid url BUT it must be under https://git.swarmlab.io\n";else if("networkport"==t)e="
Network Port
\n \n
\nBy default, when you create a container, it does not publish any of its ports to the outside world. \n \nTo make a port available to Services which are not connected to the Stack network, we use this port. \n
\n \n
\n\nTo make a service available we have to know the port number used by these service inside the container.\n\n \nPlease insert that here.\n
\n \n \n(The port for outside connections is automatically generated and you dont have to worry about it!)\n \n \n The field may contain numbers\n";else if("cpu"==t)e="
To start, we need to have a CPU Limit \n Limit the specific CPUs or cores a container can use\n\n \n \nThe field may contain numbers and dots e.g 0.5\n";else if("memory"==t)e="
To start, we need to have a Memory Limit \n
Limit the specific Memoty a container can use \ne.g 200\n \n(MB)\n\n \n \n
\n\nIt is important not to allow a running container to consume too much of the host machine’s memory.\n\n
\n \n \n The field may contain numbers\n";else if("name"==t)e="
To start, we need to have a Name \nThis name is only for your own use. The system completely disregards it!\n
";this.$swal({type:"info",html:i+s,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0})}else if("register"==t){console.log("start "+JSON.stringify("register"));s="Before you begin\n \n Before you start using the Swarmlab Hybrid API, you need a hybrid enabled account and the Swarmlab API enabled. \n \n To learn more, see Get Started with Hybrid Platform. \n ",i="
You can connect to the same contained process multiple times simultaneously, from different sessions on the Docker host. \n \n Open a terminal and Run:\n \n \n";r+=i?"docker exec -it -u"+n+" "+this.hybridshowdata.Names+" "+s:"docker exec -it "+this.hybridshowdata.Names+" "+s,r+=" ",r+=" ",r+=" Directory Maps",r+="
",r+="
Local
Container
";for(var l=a.data.test[0],c=0;c
"+l[c].Source+"
"+l[c].Destination+"
");r+="
",r+=" ",this.$swal({type:"Info",title:"Info!",icon:"info",html:r,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,cancelButtonText:"No, cancel!",showCancelButton:!1,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0,confirmButtonText:"Ok!"})}else if("install"==t){e={action:"up"};e.token=this.token,e.swarmlabname=this.swarmlabname,e.git=this.swarmlabname_git,this.$socket.client.open(),this.$socket.client.emit("install",e)}else"container-stop"==t?(this.$root.$emit("SERVER_hybrid_table_start"),this.$socket.client.emit("container-stop",this.swarmlabname,this.hybridshowdata.ID)):"create-wirequard"==t?this.$socket.client.emit("create-wirequard",this.token):"stop"==t&&this.$socket.client.emit("stop",this.swarmlabname)},async socketopen(){this.$socket.client.open(),this.$socket.client.connect()},async socketauthenticate(){this.$socket.client.emit("authenticate",this.token)},async socketreconnect(){await this.socketopen();this.socketauthenticate()},async socketclose(){this.$socket.client.close()}},sockets:{connect(){console.log("socket connected socketdatasend"),this.issocket="open";f.dispatch("pipelineLLO/setsocketStatus",{status:"open"})},error(t){console.log("socket error "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"})},connect_error(t){console.log("socket connect_error "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"});this.socketopen(),this.socketreconnect()},disconnect(t){console.log("socket disconnect "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"});this.socketreconnect()},connect_timeout(t){console.log("socket timeout "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"});this.socketreconnect()},reconnect(t){console.log("socket reconnect attemptNumber "+JSON.stringify(t)),this.socketreconnect()},reconnect_attempt(t){console.log("socket reconnect_attempt "+JSON.stringify(t)),this.socketreconnect()},reconnecting(t){console.log("socket reconnecting "+JSON.stringify(t)),this.socketreconnect()},reconnect_error(t){console.log("socket reconnect_error "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"});this.socketreconnect()},unauthorized(t){console.log("socket unauthorized "+JSON.stringify(t)),this.issocket="close";f.dispatch("pipelineLLO/setsocketStatus",{status:"close"})},socket_id_emit(t){console.log("socket id from server "+JSON.stringify(t)),this.issocket="open";f.dispatch("pipelineLLO/setsocketStatus",{status:"open"})},async logdata(t){console.log(" socket from logdata "+JSON.stringify(t));f.dispatch("pipelineLLO/addlog",{log:t});var e=f.getters["pipelineLLO/getlog"];this.log_path=[...new Set(e.map(t=>t.tailed_path))];var a="";for(let i of this.log_path)if(a=e.filter(t=>t.tailed_path===i).length,s["default"].set(this.log_path_lenght,i,a),a>this.loglenghttotal)f.dispatch("pipelineLLO/taillog",{path:i})},async message(t){console.log(" socket message "+JSON.stringify(t))},async message_config(t){t.data=JSON.parse(t.data),"ok"==t.file?(console.log("server-value-file-ok "+JSON.stringify(t.data.status)),this.CONFIG.status=t.data.status,this.CONFIG.workerkey=t.data.workerkey,this.CONFIG.swarmlab_public_wgkey=t.data.swarmlab_public_wgkey,this.CONFIG.server_ip=t.data.server_ip,this.CONFIG.allowed_ips=t.data.allowed_ips,this.CONFIG.wg_port=t.data.wg_port,this.CONFIG.wg_ip=t.data.wg_ip,this.CONFIG.swarm_ip=t.data.swarm_ip,this.CONFIG.privatekey=t.data.privatekey,this.CONFIG.publickey=t.data.publickey):"nodata"==t.file&&(this.CONFIG.status="",this.CONFIG.workerkey="",this.CONFIG.swarmlab_public_wgkey="",this.CONFIG.server_ip="",this.CONFIG.allowed_ips="",this.CONFIG.wg_port="",this.CONFIG.wg_ip="",this.CONFIG.swarm_ip="",this.CONFIG.privatekey="",this.CONFIG.publickey=""),console.log("server-config "+JSON.stringify(this.CONFIG)),f.dispatch("pipelineLLO/addconfig",this.CONFIG),this.$root.$emit("hybrid_connect_server_view",this.CONFIG)},async message_out(t){console.log(" socket out "+JSON.stringify(t)),this.$root.$emit("hybrid_log_in",t),this.$root.$emit("SERVER_hybrid_table_start"),this.hybridshowdata={}},async message_err(t){console.log(" socket err "+JSON.stringify(t)),this.$root.$emit("hybrid_log_in",t)},async message_close(t){console.log(" socket close "+JSON.stringify(t)),this.$root.$emit("hybrid_log_in",t),this.$root.$emit("hybrid_refresh_table"),this.$root.$emit("SERVER_hybrid_table_stop")},async message_hybrid_status(t){var e={};e.status=t;f.dispatch("pipelineLLO/setstatus",e);this.$root.$emit("hybrid_server_status",t),this.STATUS.swarmlabid=t.data.swarmlabid,this.STATUS.hybrid=t.data.hybrid,this.STATUS.swarmlab=t.data.swarmlab,f.dispatch("pipelineLLO/addstatusswarmlab",this.STATUS)}},actions:{}},X=Z,tt=(a("4cf0"),Object(O["a"])(X,W,H,!1,null,null,null)),et=tt.exports,at=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("card",{staticClass:"card-user",staticStyle:{"max-height":"100%"}},[s("div",{staticClass:"author"},[s("img",{staticClass:"avatar border-white",attrs:{src:a("3606"),alt:"..."}})]),s("b-container",{staticClass:"bv-example-row",attrs:{fluid:""}},[s("div",{staticClass:" col text-center"},[s("v-wait",{attrs:{for:"myRunInstance1"}},[s("template",{slot:"waiting"},[s("div",[s("img",{attrs:{src:a("cf1c"),width:"50",height:"50"}}),t._v(" Lab_Instance... ")])])],2),t.extenderror?s("button",{staticClass:"btn btn-outline-danger btn-sm",attrs:{type:"button",round:""},on:{click:function(e){return t.runextenderror()}}},[t._v(" Error: max depth exceeded")]):t._e(),t.tryConsole?s("button",{staticClass:"btn btn-outline-warning btn-sm",attrs:{type:"button",round:""},on:{click:function(e){return t.clear()}}},[t._v(" Clear")]):t._e(),s("button",{staticClass:"btn btn-outline-info btn-sm",attrs:{type:"button",round:"",disabled:""}},[t._v(" Console")]),"sublime"==t.cmOptions.keyMap?s("button",{staticClass:"btn btn-outline-info btn-sm",attrs:{type:"button",round:""},on:{click:t.infoFilter}},[t._v(" i")]):t._e()],1),s("div",{staticClass:"codemirror"},[s("codemirror",{ref:"myCm",attrs:{value:t.code,options:t.cmOptions},on:{cursorActivity:t.onCmCursorActivity,ready:t.onCmReady,focus:t.onCmFocus,input:t.onCmCodeChange}})],1)])],1)},st=[],it=a("8f94"),ot=(a("c4e3"),a("21a6"),a("a7be"),a("eb8f"),a("b866"),a("31c5"),a("9b74"),a("f6b6"),a("3c98"),a("9c7b"),a("715d"),a("b933"),a("23de"),a("02f0"),a("8c33"),a("7289"),a("2aed"),a("d72f"),a("0b6c"),a("9a48"),a("75f8"),a("697e"),a("aedd"),a("164b"),a("4895"),a("cbc8"),a("8d70"),a("9f09"),a("a2c1"),a("56b3"),a("d7d5"),{components:{card:N,codemirror:it["codemirror"]},data(){return{socketonline:!1,extenderror:!1,tryConsole:!1,ssl:{},getinfo:"",token:"",swarmlabname:"",code:"",editchoice:"",optionsedit:[{text:"code",value:"code"},{text:"text",value:"text"}],llodesc:[{llo_url:"",llo_name:"",llo_author:"",llo_intro:""}],llo:[{id:0,rm:!1,data_info:"Asciidoc \n",data_code:"#Your source code",data_service:"",code_datafile:"url",code_name:"",code_exec:"",code_options:"",code_mime:"",code_info:"",code_code:"",code_codeout:"",code_codeoutput:"console",points:"",challenge_question:"",code_challenge_question:"",challenge_answer:"",challenge_answer_hint:"",code_challenge_answer_hint:"",challenge_answer_source:"",challenge_answer_code_out:"",challenge_answer_code:"",code_challenge_answer_code:""}],searchLLO:[],searchLLOactive:!1,ADOC_html_code:"",challenge:[],action:"",tryLLO:[],service:"os2",active:0,activecount:0,remove:"",activeField:"",bootstrap:!1,firstbootstrap:0,htmlasciitmp:"",datafile:"https://git.swarmlab.io:3000/labs/examples-mpi2/raw/branch/master/0_netstat/data",datadir:"0_netstat/data",LearningObject:"",showllo:!0,showlloedit:!0,selected:"sublime",options:[{text:"vim",value:"vim"},{text:"sublime",value:"sublime"}],optionsmime:[{text:"sh",value:"bash"},{text:"javascript",value:"javascript"},{text:"python",value:"python"},{text:"php",value:"php"},{text:"sql",value:"sq;"},{text:"xml",value:"xml"},{text:"c",value:"c"}],pValidate:!1,cmOptions:{tabSize:2,styleActiveLine:!0,lineNumbers:!1,lineSeparator:"\n",line:!0,foldGutter:!0,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],highlightSelectionMatches:{showToken:/\w/,annotateScrollbar:!0},styleSelectedText:!0,mode:"shell",hintOptions:{completeSingle:!1},keyMap:"sublime",matchBrackets:!0,showCursorWhenSelecting:!0,indentUnit:this.ADOC_html_code,lineWrapping:!0,theme:"idea",refresh:!0,readOnly:!0,autofocus:!1,extraKeys:{Ctrl:"autocomplete"}},ADOC_html:[]}},methods:{socketconnect(){this.$root.$emit("SERVER_socket_connect")},clear(){this.tryConsole=!1,this.code=""},async getdata(){var t=this.getinfo;await f.dispatch("pipelineLLO/get_data",{code:t})},async showactive(t){this.topwindow(t)},onCmReady(t){t.on("change",(t,e)=>{}),t.on("keypress",()=>{t.showHint({completeSingle:!1})})},onCmCursorActivity(t,e,a){},onCmFocus(t){},onCmCodeChange(t){this.code=t},handleChange(){},setKeymap(){this.cmOptions.keyMap=this.selected},infoFilter(){var t="
\n The current limit of 125 layers is due to the kernel\'s ARG_MAX, which limits the number of arguments / length of arguments that can be passed when mounting the layers \n \n (this limit can be raised in kernels, but is not something that could be relied on as it would make those images non-interoperable on systems that don\'t have the custom configuration)\n
\n
\n Note that not every step in a Dockerfile creates a new layer, only (RUN) steps that modify the filesystem will introduce a new layer.\n
\n\n
\n
Solution
\n \n
\n Delete all local docker images related to your dockerfile using the following:\n \n \n docker rmi -f $(docker images -a -q)\n
\n\n
\n
Description
\n \n Remove unused image \n - all images not referenced by any container -\n \n
";this.$swal({type:t,html:s+a,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,cancelButtonText:"No, cancel!",showCancelButton:!1,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0,confirmButtonText:"Ok!"})},setFilter(){this.moreParams={filter:this.searchFor,type:this.selected},s["default"].nextTick(()=>this.$refs.vuetable.refresh())},resetFilter(){this.moreParams={},this.searchFor="",s["default"].nextTick(()=>this.$refs.vuetable.refresh())},onPaginationData(t){this.$refs.pagination.setPaginationData(t),this.$refs.paginationInfo.setPaginationData(t)},onChangePage(t){this.$refs.vuetable.changePage(t)},editRow(t){alert("You clicked edit on"+JSON.stringify(t))},async onAction(t,e,a){this.actionrowindex=a,console.log("index "+this.actionrowindex),"view-item"==t||("run-more"==t?(this.hybridshowdata=e,console.log("hybrid "+JSON.stringify(e))):"delete-item"==t&&this.$swal({type:"info",html:info+winfo,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,cancelButtonText:"No, cancel!",showCancelButton:!0,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0,confirmButtonText:"Yes, Delete it!"}))},refreshVuetable(){this.$nextTick(()=>{this.vuetablekey+=1})},playbookinfoShow(t){return this.visibility[t]=!0},playbookinfo(t){return this.playbookInfo=t},rowClicked(t,e){return{html:!0,title:()=>"Hello Popover: "+ ++this.counter,content:()=>"The date is: "+new Date+""}},loadsuccess(t){var e=t.data.data;this.fielddata=e;e.length},onLoadError(t){"401"==t.response.status&&(window.location.href="https://api-login.swarmlab.io:8089",s["default"].nextTick(()=>window.location.href="https://api-login.swarmlab.io:8089"))}},actions:{}},$t=Et,Pt=(a("4788"),Object(O["a"])($t,Dt,Bt,!1,null,null,null)),Gt=Pt.exports,Vt={components:{card:N,MyconnectManageServer:Gt},data(){return{loading:!1,consoleView:"off",productIndex:1}},mounted(){},beforeDestroy(){},created(){}},Tt=Vt,Jt=Object(O["a"])(Tt,Rt,Ft,!1,null,null,null),Mt=Jt.exports,jt=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("card",{staticClass:"card-user",staticStyle:{"max-height":"100%"}},[a("div",{staticClass:"row"},[a("div",{staticClass:"col-6 order-first "},[a("br"),a("mydeploy-manage-bootstrap")],1),a("div",{staticClass:"col-6 order-last"},[a("br"),a("mydeploy-manage-view")],1)])])},zt=[],Yt=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("card",{staticClass:"card-user",staticStyle:{"max-height":"100%"}},[s("div",{staticClass:"author"},[s("img",{staticClass:"avatar border-white",attrs:{src:a("0ed5"),alt:"..."}})]),s("b-container",{staticClass:"bv-example-row",attrs:{fluid:""}},[s("div",{staticClass:"row text-center"},[s("div",{staticClass:"col-12"},[s("b",[t._v("Swarmlab hybrid Deploy")])])]),s("br"),s("b-row",[s("b-col",{attrs:{cols:"8"}},[s("ValidationProvider",{ref:"hybrid_image",attrs:{name:"Image",rules:"required|alpha_num_image"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.image,expression:"deploy.image"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.image,"is-invalid":2==t.isDeployValid.image},attrs:{type:"text",name:"Image","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Image"},domProps:{value:t.deploy.image},on:{keyup:function(e){return t.isValid("image")},input:function(e){e.target.composing||t.$set(t.deploy,"image",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("image")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1),s("b-col",{attrs:{cols:"4"}},[s("ValidationProvider",{ref:"hybrid_stackname",attrs:{name:"StackName",rules:"required|alpha_num_name"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.stackname,expression:"deploy.stackname"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.stackname,"is-invalid":2==t.isDeployValid.stackname},attrs:{type:"text",name:"StackName","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"StackName"},domProps:{value:t.deploy.stackname},on:{keyup:function(e){return t.isValid("stackname")},input:function(e){e.target.composing||t.$set(t.deploy,"stackname",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("stackname")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1)],1),s("b-row",[s("b-col",{attrs:{cols:"8"}},[s("ValidationProvider",{ref:"hybrid_name",attrs:{name:"Name",rules:"required|alpha_num_name"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.name,expression:"deploy.name"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.name,"is-invalid":2==t.isDeployValid.name},attrs:{type:"HybridError",name:"Name","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Name"},domProps:{value:t.deploy.name},on:{keyup:function(e){return t.isValid("name")},input:function(e){e.target.composing||t.$set(t.deploy,"name",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("name")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1),s("b-col",{attrs:{cols:"4"}},[s("ValidationProvider",{ref:"hybrid_network",attrs:{name:"Network",rules:"required|alpha_num_name"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.network,expression:"deploy.network"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.network,"is-invalid":2==t.isDeployValid.network},attrs:{type:"text",name:"Network","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Network Name"},domProps:{value:t.deploy.network},on:{keyup:function(e){return t.isValid("network")},input:function(e){e.target.composing||t.$set(t.deploy,"network",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("network")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1)],1),s("b-row",[s("b-col",{attrs:{cols:"4"}},[s("ValidationProvider",{ref:"hybrid_cpu",attrs:{name:"Cpu",rules:"required|alpha_num_cpu"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.cpu,expression:"deploy.cpu"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.cpu,"is-invalid":2==t.isDeployValid.cpu},attrs:{type:"text",name:"Cpu","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Limit CPU e.g. 0.50"},domProps:{value:t.deploy.cpu},on:{keyup:function(e){return t.isValid("cpu")},input:function(e){e.target.composing||t.$set(t.deploy,"cpu",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("cpu")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1),s("b-col",{attrs:{cols:"4"}},[s("ValidationProvider",{ref:"hybrid_memory",attrs:{name:"Memory",rules:"required|alpha_num_memory"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.memory,expression:"deploy.memory"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.memory,"is-invalid":2==t.isDeployValid.memory},attrs:{type:"text",name:"Memory","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Limit Memory e.g. 500"},domProps:{value:t.deploy.memory},on:{keyup:function(e){return t.isValid("memory")},input:function(e){e.target.composing||t.$set(t.deploy,"memory",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("memory")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1),s("b-col",{attrs:{cols:"4"}},[s("ValidationProvider",{ref:"hybrid_networkport",attrs:{name:"Networkport",rules:"mybetween:1,65535"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.networkport,expression:"deploy.networkport"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.networkport,"is-invalid":2==t.isDeployValid.networkport},attrs:{type:"text",name:"Networkport","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"Net Port (inside the container)"},domProps:{value:t.deploy.networkport},on:{keyup:function(e){return t.isValid("networkport")},input:function(e){e.target.composing||t.$set(t.deploy,"networkport",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("networkport")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1)],1),s("b-row",[s("b-col",{attrs:{cols:"12"}},[s("ValidationProvider",{ref:"hybrid_url",attrs:{name:"Url",rules:"required|alpha_url"},scopedSlots:t._u([{key:"default",fn:function(e){var a=e.errors;e.ariaMsg,e.ariaInput,e.valid,e.invalid;return[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.url,expression:"deploy.url"}],staticClass:"form-control",class:{"is-valid":1==t.isDeployValid.url,"is-invalid":2==t.isDeployValid.url},attrs:{type:"text",name:"Url","aria-label":"Small","aria-describedby":"inputGroup-sizing-sm",placeholder:"link to README file (see info button for more)"},domProps:{value:t.deploy.url},on:{keyup:function(e){return t.isValid("url")},input:function(e){e.target.composing||t.$set(t.deploy,"url",e.target.value)}}}),s("div",{staticClass:"input-group-append"},[s("button",{staticClass:"ti-info btn btn-outline-secondary",attrs:{round:"",type:"button"},on:{click:function(e){return t.showInfo("url")}}})])]),s("span",{staticClass:"hybrid-field-error"},[t._v(t._s(a[0]))])]}}])})],1)],1),s("b-row",[s("b-col",{attrs:{cols:"6"}},[s("div",{staticClass:"input-group input-group-sm mb-3"},[s("div",{staticClass:"input-group-prepend"},[s("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button"}},[t._v("Start date ")])]),s("date-picker",{attrs:{type:"date",autocomplete:"off",format:"YYYY-MM-DD",lang:"en"},model:{value:t.deploy.startdate,callback:function(e){t.$set(t.deploy,"startdate",e)},expression:"deploy.startdate"}})],1)]),s("b-col",{attrs:{cols:"6"}},[s("div",{staticClass:"input-group input-group-sm mb-3"},[s("div",{staticClass:"input-group-prepend"},[s("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button"}},[t._v("Start time")])]),s("date-picker",{attrs:{type:"time",format:"HH:mm","show-hour":"","show-minute":"","time-picker-options":t.timePickerOptions,lang:"en"},model:{value:t.deploy.starttime,callback:function(e){t.$set(t.deploy,"starttime",e)},expression:"deploy.starttime"}})],1)])],1),s("b-row",[s("b-col",{attrs:{cols:"6"}},[s("div",{staticClass:"input-group input-group-sm mb-3"},[s("div",{staticClass:"input-group-prepend"},[s("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button"}},[t._v("End date ")])]),s("date-picker",{attrs:{type:"date",autocomplete:"off",format:"YYYY-MM-DD",lang:"en"},model:{value:t.deploy.enddate,callback:function(e){t.$set(t.deploy,"enddate",e)},expression:"deploy.enddate"}})],1)]),s("b-col",{attrs:{cols:"6"}},[s("div",{staticClass:"input-group input-group-sm mb-3"},[s("div",{staticClass:"input-group-prepend"},[s("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button"}},[t._v("End time")])]),s("date-picker",{attrs:{type:"time",format:"HH:mm","show-hour":"","show-minute":"","time-picker-options":t.timePickerOptions,lang:"en"},model:{value:t.deploy.endtime,callback:function(e){t.$set(t.deploy,"endtime",e)},expression:"deploy.endtime"}})],1)])],1),s("b-row",[s("b-col",{attrs:{cols:"6"}},[s("div",{staticClass:"input-group input-group-sm sm-3"},[s("div",{staticClass:"input-group-prepend"},[s("button",{staticClass:"ti-cloud-up btn btn-outline-success",attrs:{round:"",type:"button",title:"Deploy"},on:{click:function(e){return t.add_deploy()}}},[t._v(" Deploy ")])])])]),s("b-col",{attrs:{cols:"2"}}),s("b-col",{attrs:{cols:"4"}},[s("div",{staticClass:"custom-control custom-switch"},[s("input",{directives:[{name:"model",rawName:"v-model",value:t.deploy.usersjoin,expression:"deploy.usersjoin"}],staticClass:"custom-control-input",attrs:{type:"checkbox",id:"customStack",value:"true","unchecked-value":"false"},domProps:{checked:Array.isArray(t.deploy.usersjoin)?t._i(t.deploy.usersjoin,"true")>-1:t.deploy.usersjoin},on:{change:function(e){var a=t.deploy.usersjoin,s=e.target,i=!!s.checked;if(Array.isArray(a)){var o="true",n=t._i(a,o);s.checked?n<0&&t.$set(t.deploy,"usersjoin",a.concat([o])):n>-1&&t.$set(t.deploy,"usersjoin",a.slice(0,n).concat(a.slice(n+1)))}else t.$set(t.deploy,"usersjoin",i)}}}),s("label",{staticClass:"custom-control-label",attrs:{for:"customStack"}},[t._v("Users can join the lab instance")])])])],1)],1)],1)},Ut=[],qt=a("ec45");a("411c");Object(F["b"])("alpha_num",D["a"]),Object(F["b"])("mybetween",D["b"]),Object(F["b"])("mybetween",{message:"The {_field_} field must be a number: 1-65535"}),Object(F["b"])("alpha_num_image",t=>{var e=new RegExp(/^[A-Za-z0-9\:\.\-\_\/]+$/,"i");return!!e.test(t)||"The {_field_} field may contain alphabetic characters, numbers, colons, hyphens, slashes, dots and underscores"}),Object(F["b"])("alpha_num_name",t=>{var e=new RegExp(/^[A-Za-z0-9]+$/,"i");return!!e.test(t)||"The {_field_} field may contain alphabetic characters and numbers"}),Object(F["b"])("alpha_num_cpu",t=>{var e=new RegExp(/^(?!0\d)\d+(?:\.\d{1})?$/);return!!e.test(t)||"The {_field_} field may contain numbers and dots e.g 0.5"}),Object(F["b"])("alpha_num_memory",t=>{var e=new RegExp(/^[0-9]+$/,"i");return!!e.test(t)||"The {_field_} field may contain numbers e.g 500"}),Object(F["b"])("alpha_url",t=>{var e=new RegExp(/https?:\/\/(git\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/,"i");return!!e.test(t)||"The {_field_} field may contain url"}),Object(F["b"])("required",{...D["c"],message:"This field is required"});var Qt={components:{DatePicker:qt["a"],ValidationProvider:F["a"],card:N},props:{},data(){return{isHybridError:!1,isHybridSuccess:!1,token:"",timePickerOptions:{start:"00:00",step:"00:30",end:"23:30"},deploy:{usersjoin:!0},isDeployValid:{image:3,name:3,stackname:3,network:3,url:3,cpu:3,memory:3},isDeployError:{}}},mounted(){},created(){var t=window.location.href,e=new URL(t);this.token=e.searchParams.get("token")},beforeDestroy(){},computed:{},methods:{async add_deploy(){var t=Object.entries(this.deploy),e=new Promise((e,a)=>{t.forEach((t,a,s)=>{this.isValid(s[a][0]),a===s.length-1&&e()})});e.then(()=>{(async()=>{var t=!0;for(const[a,s]of Object.entries(this.isDeployValid))1!=s&&(t=!1);if(t){await f.dispatch("pipelineLLO/adddeploy",{token:this.token,deploy:this.deploy});this.$root.$emit("hybrid_refresh_bootstrap_view"),console.log("ok");var e='
The deploy process is started
Please wait for it to finish before trying again!
See also in "Manage your deployments" table';this.$swal({type:"Info",title:"Info!",icon:"info",html:e,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,cancelButtonText:"No, cancel!",showCancelButton:!1,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0,confirmButtonText:"Ok!"})}else{e="Missing required fields";this.$swal({type:"Info",title:"Info!",icon:"info",html:e,showCloseButton:!0,showLoaderOnConfirm:!1,allowOutsideClick:!1,cancelButtonText:"No, cancel!",showCancelButton:!1,showLoaderOnConfirm:!1,reverseButtons:!0,focusCancel:!0,confirmButtonText:"Ok!"})}})()})},async showInfo(t){if("image"==t)var e='
To start, we need to have a docker image \n We have built some. You can find it here: Menu "Images"
\n \n \n The field may contain alphabetic characters, numbers, colons, hyphens, slashes, dots and underscores\n';else if("stackname"==t)e="
To start, we need to have a Stack Name \n This will bring up all the services, volumes, networks and everything else in an isolated environment.\n\n \n \n The field may contain alphabetic characters and numbers\n";else if("network"==t)e="
To start, we need to have a Network \n This will bring up all the services, volumes, networks and everything else in an isolated network environment.\n \n \nServices running inside any of this networks containers have access (not limited by any firewall) to all other services.\n \n
\n \n \n The field may contain alphabetic characters and numbers\n\n";else if("url"==t)e="
Git Repo url
\n The location of the file describing your service. (most comonly README) \n \n\n
\n \n \n The field may contain any valid url BUT it must be under https://git.swarmlab.io\n";else if("networkport"==t)e="
Network Port
\n \n
\nBy default, when you create a container, it does not publish any of its ports to the outside world. \n \nTo make a port available to Services which are not connected to the Stack network, we use this port. \n
\n \n
\n\nTo make a service available we have to know the port number used by these service inside the container.\n\n \nPlease insert that here.\n
\n \n \n(The port for outside connections is automatically generated and you dont have to worry about it!)\n \n \n The field may contain numbers\n";else if("cpu"==t)e="
To start, we need to have a CPU Limit \n Limit the specific CPUs or cores a container can use\n\n \n \nThe field may contain numbers and dots e.g 0.5\n";else if("memory"==t)e="
To start, we need to have a Memory Limit \n
Limit the specific Memoty a container can use \ne.g 200\n \n(MB)\n\n \n \n
\n\nIt is important not to allow a running container to consume too much of the host machine’s memory.\n\n
\n \n \n The field may contain numbers\n";else if("name"==t)e="
To start, we need to have a Name \nThis name is only for your own use. The system completely disregards it!\n
Common programs, shared by the system, the system administrator and the users.
+
+
+
/boot
+
The startup files and the kernel, vmlinuz. In some recent distributions also grub data. Grub is the GRand Unified Boot loader and is an attempt to get rid of the many different boot-loaders we know today.
+
+
+
/dev
+
Contains references to all the CPU peripheral hardware, which are represented as files with special properties.
+
+
+
/etc
+
Most important system configuration files are in /etc
+
+
+
/home
+
Home directories of the common users.
+
+
+
/lib
+
Library files, includes files for all kinds of programs needed by the system and the users.
+
+
+
/mnt
+
Standard mount point for external file systems, e.g. a CD-ROM or a digital camera.
+
+
+
/opt
+
Typically contains extra and third party software.
+
+
+
/proc
+
A virtual file system containing information about system resources.
+
+
+
/root
+
The administrative user’s home directory. Mind the difference between /, the root directory and /root, the home directory of the root user.
+
+
+
/sbin
+
Programs for use by the system and the system administrator.
+
+
+
/tmp
+
Temporary space for use by the system, cleaned upon reboot, so don’t use this for saving any work!
+
+
+
/usr
+
Programs, libraries, documentation etc. for all user-related programs.
+
+
+
+
+
/var
+
Storage for all variable files and temporary files created by users, such as log files, the mail queue, the print spooler area, space for temporary storage of files downloaded from the Internet, or to keep an image of a CD before burning it.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src-local/LabLearningObject-hybrid-tmp/f9g3od4khmk.html b/src-local/LabLearningObject-hybrid-tmp/f9g3od4khmk.html
new file mode 100644
index 0000000..0e4460e
--- /dev/null
+++ b/src-local/LabLearningObject-hybrid-tmp/f9g3od4khmk.html
@@ -0,0 +1,349 @@
+
+
+
+
+
+
+
+
+
+
+An Introduction to Linux !
+
+
+
+
+
+
Displays a list of files in the current working directory.
+
+
+
cd directory
+
change directories
+
+
+
passwd
+
change the password for the current user
+
+
+
file filename
+
display file type of file with name filename
+
+
+
cat textfile
+
throws content of textfile on the screen
+
+
+
pwd
+
display present working directory
+
+
+
exit or logout
+
leave this session
+
+
+
+
+
man command
+
read man pages on command
+
+
+
+
+
1.1. Key combinations
+
+
Table 2. Key combinations
+
+
+
+
+
+
+
Key or key combination
+
Function
+
+
+
+
+
Ctrl+C
+
End a running program and return the prompt
+
+
+
Ctrl+Z
+
Suspend a program
+
+
+
ArrowUp and ArrowDown
+
Browse history. Go to the line that you want to repeat, edit details if necessary, and press Enter to save time.
+
+
+
Tab
+
Command or filename completion; when multiple choices are possible, the system will either signal with an audio or visual bell, or, if too many choices are possible, ask you if you want to see them all.
+
+
+
Tab Tab
+
Shows file or command completion possibilities.
+
+
+
+
+
Shift+PageUp and Shift+PageDown
+
Browse terminal buffer (to see text that has "scrolled off" the screen).
+
+
+
+
+
+
1.2. ls -l
+
+
+
# ls -al
+drwxrwxr-x 4 zeus zeus 4096 Οκτ 23 21:55 .
+drwxrwxr-x 9 zeus zeus 4096 Οκτ 15 14:28 ..
+drwxrwxr-x 8 zeus zeus 4096 Οκτ 23 21:55 .git
+drwxrwxr-x 4 zeus zeus 4096 Οκτ 14 20:24 install
+crw------- 1 root root 5, 1 Οκτ 23 21:22 console
+lrwxrwxrwx 1 root root 11 Οκτ 23 21:21 core -> /proc/kcore
+drwxr-xr-x 4 root root 100 Οκτ 23 21:22 cpu
+crw------- 1 root root 10, 59 Οκτ 23 21:21 cpu_dma_latency
+crw------- 1 root root 10, 203 Οκτ 23 21:21 cuse
+-rw-rw-r-- 1 zeus zeus 1517 Οκτ 23 21:55 INSTALL.md
+-rw-rw-r-- 1 zeus zeus 33883 Οκτ 15 14:28 LICENSE
+-rw-rw-r-- 1 zeus zeus 691 Οκτ 17 11:13 README.md
+
+
+
+
1.2.1. File types
+
+
This table gives an overview of the characters determining the file type:
+
+
+
+
+
+
+
+
+drwxrwxr-x 4 zeus zeus 4096 Οκτ 14 20:24 install
+
+
+
+
+
+
Table 3. File types in a long list
+
+
+
+
+
+
+
Symbol
+
Meaning
+
+
+
+
+
-
+
Regular file
+
+
+
d
+
Directory
+
+
+
l
+
Link
+
+
+
c
+
Special file
+
+
+
s
+
Socket
+
+
+
p
+
Named pipe
+
+
+
+
+
b
+
Block device
+
+
+
+
+
+
+
+
+
+
+-rw-rw-r-- 1 zeus zeus 1517 Οκτ 23 21:55 INSTALL.md
+
+
+
+
+
+
+
1.2.2. Access rights
+
+
Table 4. Access rights
+
+
+
+
+
+
+
Code
+
Meaning
+
+
+
+
+
0 or -
+
The access right that is supposed to be on this place is not granted.
+
+
+
4 or
+
read access is granted to the user category defined in this place
+
+
+
2 or
+
write permission is granted to the user category defined in this place
+
+
+
+
+
1 or
+
execute permission is granted to the user category defined in this place
+
+
+
+
+
+
1.2.3. User group codes
+
+
Table 5. User group codes
+
+
+
+
+
+
+
+
Code
+
Meaning
+
+
+
+
+
+
u
+
user permissions
+
-rw-rw-r--
+
+
+
g
+
group permissions
+
-rw-rw-r--
+
+
+
+
+
o
+
permissions for others
+
-rw-rw-rw-
+
+
+
+
+
+
1.2.4. Exercises
+
+
+
touch example
+chmod 400 example
+ls -l example
+chmod 500 example
+ls -l example
+chmod 600 example
+ls -l example
+chmod 644 example
+ls -l example
+chmod 660 example
+ls -l example
+chmod 700 example
+ls -l example
+chmod 755 example
+ls -l example
+chmod 775 example
+ls -l example
+ls -l example
+chmod 777 example
+ls -l example
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src-local/llo/new.js b/src-local/llo/new.js
index 186fc76..c6537d1 100644
--- a/src-local/llo/new.js
+++ b/src-local/llo/new.js
@@ -216,30 +216,34 @@ app.get('/get_course', (req, res, next) => {
app.get('/get_llo', (req, res, next) => {
- var RES = new Object();
- const page = req.query["page"]
- const per_page = req.query["per_page"]
- var level = req.query["level"]
- var filter = 'NULL'
- RES.sort = req.query["sort"]
+ var RES = new Object();
+ const page = req.query["page"]
+ const per_page = req.query["per_page"]
+ var level = req.query["level"]
+ var lang = req.query["lang"]
+ var filter = 'NULL'
+ var sort = req.query["sort"]
+ var sorttmp1 = sort.split('|');
+ var sortname = sorttmp1[0];
+ var sortorder = sorttmp1[1];
+
if(typeof req.query["filter"] !== "undefined" && req.query["filter"] !== ''){
-//console.log('no')
- filter = req.query["filter"]
+ filter = req.query["filter"]
}else{
-console.log('yes')
+ console.log('yes')
}
RES.type = req.query["type"]
- var showexec = `./LabLearningObject-hybrid/index.js`
- fs.readFile(showexec, 'utf8', function (err, data) {
+ var showexec = `./LabLearningObject-hybrid/index.js`
+ fs.readFile(showexec, 'utf8', function (err, data) {
if (err) {
console.error(`exec error: ${err}`);
return;
}
- var nn = []
- var datajson = JSON.parse(data);
- var datalenth = datajson.length
- var results = []
+ var nn = []
+ var datajson = JSON.parse(data);
+ var datalenth = datajson.length
+ var results = []
if(filter !== 'NULL'){
var grep = new RegExp(filter);
for (var i=0 ; i < datalenth ; i++)
@@ -251,8 +255,27 @@ console.log('yes')
datajson=results
}
- var resultsl = []
- var filterlevel = ''
+ var resultslang = []
+ var filterlang = ''
+ if(lang !== 0){
+ if (lang == 1){
+ filterlang = 'en'
+ } else if (lang == 2){
+ filterlang = 'el'
+ }
+ var greplang = new RegExp(filterlang);
+ var datalenth1 = datajson.length
+ for (var i=0 ; i < datalenth1 ; i++)
+ {
+ if(greplang.test(datajson[i]['lang'])){
+ resultslang.push(datajson[i]);
+ }
+ }
+ datajson=resultslang
+ }
+
+ var resultsl = []
+ var filterlevel = ''
if(level !== 0){
if (level == 1){
filterlevel = 'Elementary'
@@ -265,8 +288,8 @@ console.log('yes')
} else if (level == 5){
filterlevel = 'Guru'
}
- var greplevel = new RegExp(filterlevel);
- var datalenth1 = datajson.length
+ var greplevel = new RegExp(filterlevel);
+ var datalenth1 = datajson.length
for (var i=0 ; i < datalenth1 ; i++)
{
if(greplevel.test(datajson[i]['level'])){
@@ -275,33 +298,63 @@ console.log('yes')
}
datajson=resultsl
}
+
+ // sort by title
+ if(sortname == 'title'){
+ datajson.sort(function (a, b) {
+ if(sortorder == 'asc'){
+ return a.title.localeCompare(b.title);
+ }else{
+ return b.title.localeCompare(a.title);
+ }
+ });
+ }else if(sortname == 'lang'){
+ datajson.sort(function (a, b) {
+ if(sortorder == 'asc'){
+ return a.lang.localeCompare(b.lang);
+ }else{
+ return b.lang.localeCompare(a.lang);
+ }
+ });
+ }
-//console.log(datajson)
- var total = datajson.length;
- var perpage = per_page
- //var page = 1
- var lastpage = Math.trunc(total/5);
+ var resultid = []
+ var datalenth2 = datajson.length
+ for (var i=0 ; i < datalenth2 ; i++)
+ {
+ datajson[i].id=i
+ datajson[i]._id=i
+ resultid.push(datajson[i]);
+ }
+ datajson=resultid
+
+ var total = datajson.length;
+ var perpage = per_page
+ //var page = 1
+ //var lastpage = Math.trunc(total/5);
+ var lastpage = total/perpage;
if(lastpage <= 1) {
lastpage=1
}else{
lastpage++
}
+ lastpage = Math.trunc(lastpage)
- var next=(page+1);
+ var next=(page+1);
if(next >= lastpage){
next=lastpage;
}
- var prev=(page-1);
+ var prev=(page-1);
if(prev == 0){
prev=1;
}
- var from=((page-1)*perpage)+1;
- var to=(perpage*page)
+ var from=((page-1)*perpage)+1;
+ var to=(perpage*page)
- var myplaybooks = new Object();
+ var myplaybooks = new Object();
var links = `
{
"pagination": {
@@ -320,10 +373,11 @@ console.log('yes')
`
//"next_page_url": "?page="+${next},
//"prev_page_url": "?page="+${prev},
-//console.log(JSON.stringify(links))
//myplaybooks.links = links
myplaybooks.links = JSON.parse(links);
- myplaybooks.data = datajson;
+ from--
+ myplaybooks.data = datajson.slice(from,to);
+ //myplaybooks.data = datajson;
var RES = new Object();
RES.code = req.query["action"]
@@ -341,9 +395,13 @@ app.get('/dockerservices', (req, res, next) => {
var RES = new Object();
const page = req.query["page"]
const per_page = req.query["per_page"]
- RES.sort = req.query["sort"]
- RES.filter = req.query["filter"]
- RES.type = req.query["type"]
+ var sort = req.query["sort"]
+ var filter = req.query["filter"]
+ var type = req.query["type"]
+ var sort = req.query["sort"]
+ var sorttmp1 = sort.split('|');
+ var sortname = sorttmp1[0];
+ var sortorder = sorttmp1[1];
var showexec = `docker ps --format '{"ID":"{{ .ID }}", "Image": "{{ .Image }}", "Names":"{{ .Names }}", "Ports":"{{.Ports}}", "Networks":"{{.Networks}}", "Status":"{{.Status}}","RunningFor":"{{.RunningFor}}","CreatedAt":"{{.CreatedAt}}"}' | jq . -s `
exec(showexec, (err, stdout, stderr) => {
@@ -352,9 +410,58 @@ app.get('/dockerservices', (req, res, next) => {
return;
}
- var nn = []
- var string = stdout.toString()
- var datajson = JSON.parse(string);
+ var nn = []
+ var string = stdout.toString()
+ var datajson = JSON.parse(string);
+
+ var results = []
+ if(filter !== 'NULL'){
+ var grep = new RegExp(filter);
+ var datalenth = datajson.length
+ for (var i=0 ; i < datalenth ; i++)
+ {
+ if(grep.test(datajson[i]['Names'])){
+ results.push(datajson[i]);
+ }
+ }
+ datajson=results
+ }
+
+
+
+ // sort by title
+ if(sortname == 'Names'){
+ datajson.sort(function (a, b) {
+ if(sortorder == 'asc'){
+ return a.Names.localeCompare(b.Names);
+ }else{
+ return b.Names.localeCompare(a.Names);
+ }
+ });
+ }else if(sortname == 'Status'){
+ datajson.sort(function (a, b) {
+ if(sortorder == 'asc'){
+ return a.Status.localeCompare(b.Status);
+ }else{
+ return b.Status.localeCompare(a.Status);
+ }
+ });
+ }
+
+
+
+
+
+
+ var resultid = []
+ var datalenth2 = datajson.length
+ for (var i=0 ; i < datalenth2 ; i++)
+ {
+ datajson[i].id=i
+ datajson[i]._id=i
+ resultid.push(datajson[i]);
+ }
+ datajson=resultid
//console.log('Number of files ' + stdout);
//console.log('Number string ' + string);
@@ -362,13 +469,14 @@ app.get('/dockerservices', (req, res, next) => {
var total = datajson.length;
var perpage = per_page
//var page = 1
- var lastpage = Math.trunc(total/5);
+ var lastpage = total/perpage;
if(lastpage <= 1) {
lastpage=1
}else{
lastpage++
}
+ lastpage = Math.trunc(lastpage);
var next=(page+1);
if(next >= lastpage){
@@ -404,7 +512,9 @@ app.get('/dockerservices', (req, res, next) => {
//console.log(JSON.stringify(links))
//myplaybooks.links = links
myplaybooks.links = JSON.parse(links);
- myplaybooks.data = datajson;
+ from--
+ myplaybooks.data = datajson.slice(from,to);
+ //myplaybooks.data = datajson;
var RES = new Object();
RES.code = req.query["action"]
diff --git a/src/components/manageservices/llo-search.vue b/src/components/manageservices/llo-search.vue
index 7ed6a6e..92f38bd 100644
--- a/src/components/manageservices/llo-search.vue
+++ b/src/components/manageservices/llo-search.vue
@@ -274,6 +274,14 @@ v-for="(course, i) in courses"