123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391 |
- <style>
- .system {height:99%; overflow:hidden;}
- .data-info .board{ height:300px; display:grid; grid-template-columns:auto 200px 200px; gap:20px; align-items:center}
- /*.board { background-image: linear-gradient(to bottom, #ffffff,#ffffff,#f3f3f3,#d3d3d3d3)}*/
- .number {font-size:48px; font-family:courier;padding:8px; ;}
- .etl {display:grid; grid-template-columns: 250px auto; gap:2;}
- .chart {box-shadow : 0px 1px 4px 2px #d3d3d3; width:200px; height:250px;
- display:grid; align-items:center;
- background-image: linear-gradient(to bottom,#f3f3f3,#ffffff);
- overflow:hidden;
-
-
- }
-
- .dialog { width:450px; min-height:200px; display:grid; grid-template-rows: 40px 80% auto; gap:4px}
- .dialog .title-bar { border-top-left-radius: 8px; border-top-right-radius: 8px ; padding:4px; background-color:#f3f3f3; gap:2px; display:grid; grid-template-columns: auto 32px; align-items:center}
- .dialog .action {display:grid; align-items: flex-end; padding-left:25%; padding-right:25%;}
- .dialog .message {display:grid; align-items: center; grid-template-columns: 20% auto;}
- .dialog .message .text {line-height:2; text-transform: capitalize;}
- .fa-exclamation-triangle {color:orange}
- .fa-question-circle{color:#009df7}
- </style>
- <script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
- <script src="{{context}}/static/js/io/dialog.js"></script>
- <script src="{{context}}/static/js/io/io.js"></script>
- <script src="{{context}}/static/js/io/healthcare.js"></script>
- <script>
- var select = function(node){
- var value = $($(node).children()[0]).attr('data-value')
-
- jx.utils.patterns.visitor($('.tab'),function(_item){
- var button = $(_item).children()[0]
- $(_item).removeClass('selected')
- //alert([$(button).attr('data-value'),value])
- if($(button).attr('data-value') == value){
- $(node).addClass('selected')
- $('.'+value).show()
-
- }else{
- var m = '.'+ $(button).attr('data-value')
-
- $(m).hide()
-
-
- }
- })
-
- }
- var monitor = {}
- monitor.listen = {handler:null}
-
- monitor.data = function(){
- var http = HttpClient.instance()
- http.get("/data",function(x){
- var r = JSON.parse(x.responseText)
- var keys = jx.utils.keys(r) //-- process,files
- for (var i in keys){
- var prefix = keys[i]
- if(prefix == 'process'){
- if(r[prefix].counts != 0){
- //
- // We should insure the listeners are enabled
- if(monitor.listen.handler == null){
- /*monitor.listen.handler = setInterval(
- function(){
- console.log('running ...')
- monitor.data()},5000)*/
- }
- }else{
- if (monitor.listen.handler != null){
-
- clearInterval(monitor.listen.handler)
- }
- dialog.close()
- }
- }
- monitor.render(prefix,r[prefix])
- }
- })
- }
- monitor.render = function(prefix,r){
- prefix = '.'+prefix
-
- var div = jx.dom.get.instance('DIV')
- var label = jx.dom.get.instance('DIV')
- div.align = 'center'
-
- div.innerHTML = r.counts
- div.className = 'number'
- label.innerHTML = prefix.replace(/\./,'')
- label.style.textTransform = 'capitalize'
- label.className = 'small bold border-top'
- div.append(label)
-
- $(prefix + ' .board').empty()
- $(prefix+' .board').append(div)
-
- var charts = jx.utils.patterns.visitor(r.chart,function(option){
-
-
- var div = jx.dom.get.instance('div')
-
- div.className = 'chart'
- div.align='center'
- $(prefix+' .board').append(div)
-
- var chart = new ApexCharts($(div)[0],option)
- //chart.render()
- div.chart = chart
-
- return chart
- })
- var observers = jx.utils.patterns.visitor(charts,function(_item){
- var m = function(_chart){
- this.chart = _chart ;
- this.apply = function(caller){this.chart.render();
- caller.notify()
- }
- }
- return new m(_item)
- })
- jx.utils.patterns.observer(observers,'apply')
- //jx.utils.patterns.iterator(charts,'render')
-
- /*setTimeout(function(){
- jx.utils.patterns.visitor(charts,function(_item){_item.render()})
- },1000) */
- }
- var setup = {}
- setup.open = function(){
- $('.dashboard').slideUp(
- function(){
- $('.setup').slideDown()
- }
- )
-
- }
- $(document).ready(function(){
- /*var shandler = new io();
- if (shandler.disconnected ==false){
- shandler.disconnect()
- }
- var socket = io.connect()
- socket.on('connect',function(e){
- socket.emit('connect',{name:'steve'})
- })
- socket.on('update',function(e){
- console.log(e)
- console.log()
- })
- var socket = io.connect('http://localhost:81',{cors:{AccessControlAllowOrigin:'*'}}) //('http://localhost:81/stream')
- socket.on('procs',function(e){
-
- })
- socket.on('data',function(e){
-
- $('.logs').empty()
- var div = $('.logs')
-
- var option = e.apex
- option.plotOptions.pie.size = 220
- option.plotOptions.pie = {dataLabels: {show:true,name:{show:true},value:{show:true}}}
-
- option.legend.show = false
- console.log(option)
- c = new ApexCharts(div[0],option)
- c.render()
- socket.emit("procs",{"name":"steve"})
- })*/
-
- select($('.tab')[0])
- monitor.data()
-
- $('.email').text($('#email').val())
- })
- </script>
-
- <div class="system setup">
- <div class="status">
-
- {% if not store.type %}
- <div >
- <span class="caption bold border-bottom" style="padding-right:10">Current Configuration</span>
- <p></p>
- <div style="display:grid; align-items:center; grid-template-columns:32px auto;">
- <i class="fa fa-times" style="font-size:28; margin:4px;"></i> <span>System needs to be initialized !</span>
- </div>
- <p></p>
- <div class="active-button border-round" style="width:50%">
- <div class="icon">
- <i class="fas fa-cog" style="font-size:28"></i>
- </div>
- <div class="bold" align="center">Initialize</div>
- </div>
- </div>
- {% else %}
- <div class="border-right">
-
- <span class="caption bold border-bottom" style="padding-right:10">Current Configuration</span>
- <p>
- </p>
- <div class="item" style="display:grid; align-items:center">
- <div class="bold" style="text-transform: capitalize;">Owner </div><div class="bold">:</div>
- <div>
-
- <input type="text" id="email" value="{{owner}}">
- </div>
- </div>
- <div class="item">
- <div class="bold" style="text-transform: capitalize;">store</div><div class="bold">:</div>
- <div class="">{{store.type}}</div>
- </div>
- <p></p>
- <div class="active-button border-round" style="width:50%" onclick="healthcare.io.update()">
- <div class="icon">
- <I class="fas fa-download" style="font-size:28"></I>
- </div>
- <div class="bold" align="center">Update Config</div>
- </div>
- <p>
- <div class="code">
- #<br>
- healthcare-io.py --init <span class="email"></span> --store mongo
- </div>
- </p>
- </div>
-
- {%endif%}
- <p></p>
- <br>
- <div class="border-right">
- <span class="caption bold border-bottom" style="padding-right:10">Manage Plan</span>
- <p></p>
- <div style="line-height: 2;">Insure your account is tied to a cloud service provider.
- <br>We support <span class="bold">google-drive, dropbox, one-drive or box. </span>
- </div>
- <p>
- <div class="bold active-button border-round" style="width:50%" onclick="jx.modal.show({url:'https://healthcareio.the-phi.com/store/healthcareio/plans'})">
- <div>
- <img src="{{context}}/static/img/logo.svg" />
- </div>
- <div align="center">Open Plan Console</div>
- </div>
- </p>
-
- </div>
- <br>
- <div class="border-right" style="height:30%"></div>
- </div>
- <div class="_border-right"></div>
- <div >
- <span class="caption bold border-bottom" style="padding-right:10">
- Manage Processes</span>
- <p>
- <div class="input-form" style="grid-template-columns: 30% auto;">
- <div class="item" style="grid-row:1; grid-column:1; ">
- <div class="label">Process #</div>
- <input type="text" class="procs batch"placeholder="#" style="width:64px; text-align:right" value="{{args.batch}}" onchange="healthcare.io.apply()"/>
- </div>
- <div class="item" style="grid-row:1; grid-column:2 ">
- <div class="label">Folder #</div>
- <input type="text" placeholder="Process counts" value="/data"/ class="data folder" disabled>
- </div>
-
- </div>
- <div style="display:grid; grid-template-columns:repeat(2,215px); gap:2px;">
- <div class="active-button border-round bold io-apply" style="margin-top:32; display:none" onclick="healthcare.io.apply()">
- <div class="icon"><i class="far fa-save" style="font-size:28; color:#4682B4"></i></div>
- <div align="center">Apply</div>
- </div>
- <div class="active-button border-round bold" style="margin-top:32" onclick="healthcare.io.stop()">
- <i class="far fa-stop-circle" style="font-size:28; color:maroon"></i>
-
- <div align="center">Stop</div>
- </div>
- <div class="active-button border-round bold" style="margin-top:32" onclick="healthcare.io.run()">
- <i class="fas fa-running" style="font-size:28; color:green"></i>
- <div align="center">Run</div>
- </div>
- </div>
-
- </p>
- <p>
- <div class="code">
- <div class="bold"># The command that will be executed</div>
- <div>healthcare-io.py --parse --folder /data --batch <span class="batch">{{args.batch}}</span></div>
- </div>
- </p>
- <p>
- <div style="display:grid; grid-template-columns:auto 48px ; gap:2px">
- <div class="bold caption border-bottom">Process Monitoring</div>
- <div class="active" align="center" title="reload" onclick="monitor.data()"><i class="fas fa-sync"></i></div>
- </div>
- <div class="small">Powered by smart-top</div>
- <p></p>
- <div class="tabs">
- <div class="tab selected" onclick="select(this)">
- <div class="active" data-value="process" >
- <i class="far fa-clock" style="color:maroon"></i>
- <span>Process</span>
- </div>
- </div>
- <div class="tab" onclick="select(this)">
- <div class="active" data-value="files"><i class="fas fa-file-alt"></i> Files</div>
- </div>
- <div class="tab" onclick="select(this)">
- <div class="active" data-value="export"><i class="fas fa-upload"></i> Export</div>
- </div>
-
- </div>
- <div class="data-info">
- <div class="process ">
-
- <div class="board"></div>
- <div class="small" align="center">
- <div class="border-top bold" style="color:#4682B4;">Running Processes and resource usage</div>
- </div>
- </div>
- <div class="files">
- <div class="board"></div>
- <div class="small" align="center">
- <div class="border-top bold" style="color:#4682B4;">Summary of files found and processed</div>
- </div>
- </div>
- <div class="export">
- <p></p>
- <div class="etl">
- <div class="" >
- <div class="menu" style="position:absolute; width:200">
- <div class="items ">
- <div class="bold active" style="display:grid; grid-template-columns:80% auto;">
- <span>
- <i class="fas fa-cloud"></i>
- Cloud</span>
- <span class="glyph">
- <i class="fas fa-angle-down"></i>
- </span>
- </div>
- <div class="item-group border-round border small">
- <div class="item" onclick="healthcare.io.publish.database.init('s3')">AWS S3</div>
- <div class="item" onclick="healthcare.io.publish.database.init('bigquery')">Google Bigquery</div>
-
- </div>
- </div>
- <div class="items ">
- <div class="bold active"style="display:grid; grid-template-columns:80% auto;">
- <span>
- <i class="fas fa-database"></i>
- Database</span>
- <span class="glyph">
- <i class="fas fa-angle-down"></i>
- </span>
- </div>
- <div class="item-group border-round border small">
- <div class="bold">SQL</div>
-
- <div class="item" style="margin-left:15px; margin-right:32px" onclick="healthcare.io.publish.database.init('postgresql')">PostgreSQL</div>
- <div class="item" style="margin-left:15px; margin-right:32px" onclick="healthcare.io.publish.database.init('mysql')">MySQL</div>
-
-
-
- <div class="bold">NoSQL</div>
- <div class="item" style="margin-left:15px; margin-right:32px" onclick="healthcare.io.publish.database.init('mongodb')">Mongodb</div>
- <div class="item" style="margin-left:15px; margin-right:32px" onclick="healthcare.io.publish.database.init('couchdb')">Couchdb</div>
- </div>
- </div>
- </div>
- </div>
- <div>
- <div class="active-button border-round" style="width:50%">
- <div class="icon"><i class="fas fa-running" style="font-size:28"></i></div> <div class="bold" align="center">Start</div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </p>
- </div>
- </div>
|