| 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>
 |