cpee-model-management 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/cpee-model-management.gemspec +1 -1
- data/lib/cpee-model-management/implementation.rb +6 -0
- data/tools/cpee-moma +60 -1
- data/ui/index.html +1 -2
- data/ui/instances.html +5 -0
- data/ui/instances_view.html +89 -0
- data/ui/js/stats.js +6 -2
- data/ui/resources.html +5 -0
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6fc783f8350eac7d65fbda35f275d4ea319878f2265e5d3e02eaf234eb0d4fd1
         | 
| 4 | 
            +
              data.tar.gz: c16ceedc6068a9d0114ddc5456625f55a8a7072770d2e3af28479198a988282c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 12fe97b8aa17301c3863fb983d0527efae7aacecfb313d5963a0a0d19aa30d73c00ff2b85275a1a0d50a48010d4185df3ff7fd9c4eae15c467ee230b8cc35154
         | 
| 7 | 
            +
              data.tar.gz: 3a657a24d96ebde89e77378f35aed645e3548148c5c33ba28b064362030c5f9b35394e7704cf64b818d5d85b083ab0da84790575f1e8e601d25ae2e6ed0967d2
         | 
| @@ -678,6 +678,7 @@ module CPEE | |
| 678 678 | 
             
                          multi.del(File.join(prefix,'state'))
         | 
| 679 679 | 
             
                          multi.del(File.join(prefix,'cpu'))
         | 
| 680 680 | 
             
                          multi.del(File.join(prefix,'mem'))
         | 
| 681 | 
            +
                          multi.del(File.join(prefix,'time'))
         | 
| 681 682 | 
             
                          children.each do |child|
         | 
| 682 683 | 
             
                            if parent
         | 
| 683 684 | 
             
                              multi.set(File.join(engine,child,'parent'),parent)
         | 
| @@ -706,6 +707,7 @@ module CPEE | |
| 706 707 | 
             
                          multi.set(File.join(prefix,'name'),attr['info'])
         | 
| 707 708 | 
             
                          multi.set(File.join(prefix,'cpu'),0)
         | 
| 708 709 | 
             
                          multi.set(File.join(prefix,'mem'),0)
         | 
| 710 | 
            +
                          multi.set(File.join(prefix,'time'),0)
         | 
| 709 711 | 
             
                        end
         | 
| 710 712 | 
             
                      elsif %w{stopping}.include?(content['state'])
         | 
| 711 713 | 
             
                        redis.set(File.join(prefix,'state'),content['state'])
         | 
| @@ -716,13 +718,16 @@ module CPEE | |
| 716 718 | 
             
                          multi.set(File.join(prefix,'state'),content['state'])
         | 
| 717 719 | 
             
                          multi.set(File.join(prefix,'cpu'),0)
         | 
| 718 720 | 
             
                          multi.set(File.join(prefix,'mem'),0)
         | 
| 721 | 
            +
                          multi.set(File.join(prefix,'time'),0)
         | 
| 719 722 | 
             
                        end
         | 
| 720 723 | 
             
                      elsif %w{running}.include?(content['state'])
         | 
| 721 724 | 
             
                        oldstate = redis.get(File.join(prefix,'state'))
         | 
| 722 725 | 
             
                        redis.multi do |multi|
         | 
| 723 726 | 
             
                          multi.decr(File.join(engine,oldstate)) rescue nil
         | 
| 724 727 | 
             
                          multi.incr(File.join(engine,'running'))
         | 
| 728 | 
            +
                          multi.set(File.join(prefix,'name'),attr['info'])
         | 
| 725 729 | 
             
                          multi.set(File.join(prefix,'state'),content['state'])
         | 
| 730 | 
            +
                          multi.set(File.join(prefix,'time'),Time.now.to_i)
         | 
| 726 731 | 
             
                        end
         | 
| 727 732 | 
             
                      end
         | 
| 728 733 |  | 
| @@ -756,6 +761,7 @@ module CPEE | |
| 756 761 | 
             
                      end
         | 
| 757 762 | 
             
                    elsif topic == 'status'  && event_name == 'resource_utilization'
         | 
| 758 763 | 
             
                      redis.multi do |multi|
         | 
| 764 | 
            +
                        multi.set(File.join(prefix,'name'),attr['info'])
         | 
| 759 765 | 
             
                        multi.set(File.join(prefix,'cpu'),content['utime'] + content['stime'])
         | 
| 760 766 | 
             
                        multi.set(File.join(prefix,'mem'),content['mib'])
         | 
| 761 767 | 
             
                      end
         | 
    
        data/tools/cpee-moma
    CHANGED
    
    | @@ -8,6 +8,7 @@ require 'zip' | |
| 8 8 | 
             
            require 'typhoeus'
         | 
| 9 9 | 
             
            require 'json'
         | 
| 10 10 | 
             
            require 'securerandom'
         | 
| 11 | 
            +
            require 'redis'
         | 
| 11 12 |  | 
| 12 13 | 
             
            def wrap(s, width=78, indent=18)
         | 
| 13 14 | 
             
            	lines = []
         | 
| @@ -62,10 +63,12 @@ ARGV.options { |opt| | |
| 62 63 | 
             
              opt.on(wrap("[cpui DIR]        scaffolds a sample html client. New versions might require manual merging if you changed something."))
         | 
| 63 64 | 
             
            	opt.on("")
         | 
| 64 65 | 
             
              opt.on(wrap("[convert]         converts all testsets in the current directory to design terminology."))
         | 
| 66 | 
            +
            	opt.on("")
         | 
| 67 | 
            +
              opt.on(wrap("[consistent]      makes the instances db consistent. can only be run in server dir."))
         | 
| 65 68 | 
             
              opt.parse!
         | 
| 66 69 | 
             
            }
         | 
| 67 70 | 
             
            if (ARGV.length == 0) ||
         | 
| 68 | 
            -
               (ARGV.length == 1  && !(%w(convert).include?(ARGV[0]))) ||
         | 
| 71 | 
            +
               (ARGV.length == 1  && !(%w(convert consistent).include?(ARGV[0]))) ||
         | 
| 69 72 | 
             
               (ARGV.length == 2  && !(%w(cpui new).include?(ARGV[0]))) ||
         | 
| 70 73 | 
             
               (ARGV.length >  2)
         | 
| 71 74 | 
             
              puts ARGV.options
         | 
| @@ -182,6 +185,62 @@ elsif command == 'convert' | |
| 182 185 | 
             
                File.unlink(f + '.creator') rescue nil
         | 
| 183 186 | 
             
                File.unlink(f + '.author') rescue nil
         | 
| 184 187 | 
             
              end
         | 
| 188 | 
            +
            elsif command == 'consistent'
         | 
| 189 | 
            +
              redis = Redis.new(path: 'redis.sock', db: 0)
         | 
| 190 | 
            +
              redis.keys('*/instances').each do |instances|
         | 
| 191 | 
            +
                engine = File.dirname(instances)
         | 
| 192 | 
            +
                s_ready = s_running = s_stopped = 0
         | 
| 193 | 
            +
                redis.lrange(instances,0,-1).each do |i|
         | 
| 194 | 
            +
                  prefix = File.join(engine,i.to_s)
         | 
| 195 | 
            +
                  url = redis.get(File.join(prefix,'instance-url'))
         | 
| 196 | 
            +
                  res = Typhoeus.get(url, :followlocation => true)
         | 
| 197 | 
            +
                  if res.success?
         | 
| 198 | 
            +
                    oldstate = redis.get(File.join(prefix,'state'))
         | 
| 199 | 
            +
                    case oldstate
         | 
| 200 | 
            +
                      when 'ready'
         | 
| 201 | 
            +
                        s_ready += 1
         | 
| 202 | 
            +
                      when 'running'
         | 
| 203 | 
            +
                        s_running += 1
         | 
| 204 | 
            +
                      when 'stopped'
         | 
| 205 | 
            +
                        s_stopped += 1
         | 
| 206 | 
            +
                    end
         | 
| 207 | 
            +
                  else
         | 
| 208 | 
            +
                    parent = redis.get(File.join(prefix,'parent'))
         | 
| 209 | 
            +
                    oldstate = redis.get(File.join(prefix,'state'))
         | 
| 210 | 
            +
                    children = redis.lrange(File.join(prefix,'children'),0,-1)
         | 
| 211 | 
            +
                    redis.multi do |multi|
         | 
| 212 | 
            +
                      multi.decr(File.join(engine,oldstate)) rescue nil
         | 
| 213 | 
            +
                      multi.incr(File.join(engine,'total_abandoned'))
         | 
| 214 | 
            +
                      multi.lrem(File.join(engine,'instances'),0,i.to_s)
         | 
| 215 | 
            +
                      multi.del(File.join(prefix,'instance-url'))
         | 
| 216 | 
            +
                      multi.del(File.join(prefix,'author'))
         | 
| 217 | 
            +
                      multi.del(File.join(prefix,'path'))
         | 
| 218 | 
            +
                      multi.del(File.join(prefix,'name'))
         | 
| 219 | 
            +
                      multi.del(File.join(prefix,'state'))
         | 
| 220 | 
            +
                      multi.del(File.join(prefix,'cpu'))
         | 
| 221 | 
            +
                      multi.del(File.join(prefix,'mem'))
         | 
| 222 | 
            +
                      multi.del(File.join(prefix,'time'))
         | 
| 223 | 
            +
                      children.each do |child|
         | 
| 224 | 
            +
                        if parent
         | 
| 225 | 
            +
                          multi.set(File.join(engine,child,'parent'),parent)
         | 
| 226 | 
            +
                        else
         | 
| 227 | 
            +
                          multi.del(File.join(engine,child,'parent'))
         | 
| 228 | 
            +
                        end
         | 
| 229 | 
            +
                      end
         | 
| 230 | 
            +
                      multi.del(File.join(prefix,'children'))
         | 
| 231 | 
            +
                      multi.del(File.join(prefix,'parent'))
         | 
| 232 | 
            +
                      if parent
         | 
| 233 | 
            +
                        multi.lrem(File.join(engine,parent,'children'),0,i.to_s)
         | 
| 234 | 
            +
                      end
         | 
| 235 | 
            +
                    end
         | 
| 236 | 
            +
                  end
         | 
| 237 | 
            +
                end
         | 
| 238 | 
            +
                redis.multi do |multi|
         | 
| 239 | 
            +
                  multi.set(File.join(engine,'ready'),s_ready.to_i)
         | 
| 240 | 
            +
                  multi.set(File.join(engine,'running'),s_running.to_i)
         | 
| 241 | 
            +
                  multi.set(File.join(engine,'stopped'),s_stopped.to_i)
         | 
| 242 | 
            +
                end
         | 
| 243 | 
            +
              end
         | 
| 185 244 | 
             
            elsif command == 'new'
         | 
| 186 245 | 
             
              if !File.exists?(p1)
         | 
| 187 246 | 
             
                FileUtils.mkdir(File.join(p1)) rescue nil
         | 
    
        data/ui/index.html
    CHANGED
    
    | @@ -179,9 +179,8 @@ | |
| 179 179 | 
             
                          <td class="num">(<span></span>)</td>
         | 
| 180 180 | 
             
                          <td class="state"><span class='value'></span> <span class='abandon'>[<a href='#' title='abandon'>a</a>]</span></td>
         | 
| 181 181 | 
             
                          <td class="author"><em>unknown</em></td>
         | 
| 182 | 
            -
                          <td class="cpu"></td>
         | 
| 183 | 
            -
                          <td>/</td>
         | 
| 184 182 | 
             
                          <td class="mem"></em></td>
         | 
| 183 | 
            +
                          <td class="active"></em></td>
         | 
| 185 184 | 
             
                        </tr>
         | 
| 186 185 | 
             
                        <tr class="sub">
         | 
| 187 186 | 
             
                          <td colspan="6"><table></table></td>
         | 
    
        data/ui/instances.html
    CHANGED
    
    | @@ -56,6 +56,11 @@ | |
| 56 56 | 
             
                <link   rel="stylesheet"      href="css/stats.css" type="text/css"/>
         | 
| 57 57 | 
             
                <link   rel="stylesheet"      href="css/stats_standalone.css" type="text/css"/>
         | 
| 58 58 | 
             
                <script type="text/javascript" src="js/stats.js"></script>
         | 
| 59 | 
            +
                <style>
         | 
| 60 | 
            +
                  [is="x-ui-"] {
         | 
| 61 | 
            +
                    overflow: scroll;
         | 
| 62 | 
            +
                  }
         | 
| 63 | 
            +
                </style>
         | 
| 59 64 | 
             
              </head>
         | 
| 60 65 | 
             
              <body is="x-ui-">
         | 
| 61 66 | 
             
                <p>
         | 
| @@ -0,0 +1,89 @@ | |
| 1 | 
            +
            <!--
         | 
| 2 | 
            +
              This file is part of CPEE-MODEL-MANAGEMENT.
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              CPEE-MODEL-MANAGEMENT is free software: you can redistribute it and/or
         | 
| 5 | 
            +
              modify it under the terms of the GNU General Public License as published by
         | 
| 6 | 
            +
              the Free Software Foundation, either version 3 of the License, or (at your
         | 
| 7 | 
            +
              option) any later version.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              CPEE-MODEL-MANAGEMENT is distributed in the hope that it will be useful, but
         | 
| 10 | 
            +
              WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
         | 
| 11 | 
            +
              FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
         | 
| 12 | 
            +
              more details.
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              You should have received a copy of the GNU General Public License along with
         | 
| 15 | 
            +
              CPEE-MODEL-MANAGEMENT (file LICENSE in the main directory).  If not, see
         | 
| 16 | 
            +
              <http://www.gnu.org/licenses/>.
         | 
| 17 | 
            +
            -->
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            <!DOCTYPE html>
         | 
| 20 | 
            +
            <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
         | 
| 21 | 
            +
              <head>
         | 
| 22 | 
            +
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
         | 
| 23 | 
            +
                <title>Instances</title>
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                <!-- libs, do not modify. When local than load local libs. -->
         | 
| 26 | 
            +
                <script type="text/javascript" src="/js_libs/jquery.min.js"></script>
         | 
| 27 | 
            +
                <script type="text/javascript" src="/js_libs/jquery.browser.js"></script>
         | 
| 28 | 
            +
                <script type="text/javascript" src="/js_libs/jquery.svg.min.js"></script>
         | 
| 29 | 
            +
                <script type="text/javascript" src="/js_libs/jquery.svgdom.min.js"></script>
         | 
| 30 | 
            +
                <script type="text/javascript" src="/js_libs/vkbeautify.js"></script>
         | 
| 31 | 
            +
                <script type="text/javascript" src="/js_libs/util.js"></script>
         | 
| 32 | 
            +
                <script type="text/javascript" src="/js_libs/printf.js"></script>
         | 
| 33 | 
            +
                <script type="text/javascript" src="/js_libs/strftime.min.js"></script>
         | 
| 34 | 
            +
                <script type="text/javascript" src="/js_libs/parsequery.js"></script>
         | 
| 35 | 
            +
                <script type="text/javascript" src="/js_libs/underscore.min.js"></script>
         | 
| 36 | 
            +
                <script type="text/javascript" src="/js_libs/jquery.caret.min.js"></script>
         | 
| 37 | 
            +
                <script type="text/javascript" src="/js_libs/jquery.cookie.js"></script>
         | 
| 38 | 
            +
                <script type="text/javascript" src="/js_libs/plotly.min.js"></script>
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery.qrcode/1.0/jquery.qrcode.min.js"></script>
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                <script type="text/javascript" src="/js_libs/relaxngui.js"></script>
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                <script type="text/javascript" src="/js_libs/uidash.js"></script>
         | 
| 45 | 
            +
                <script type="text/javascript" src="/js_libs/custommenu.js"></script>
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                <link   rel="stylesheet"      href="/js_libs/custommenu.css" type="text/css"/>
         | 
| 48 | 
            +
                <link   rel="stylesheet"      href="/js_libs/uidash.css" type="text/css"/>
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                <link   rel="stylesheet"      href="/global_ui/ui.css" type="text/css"/>
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                <link   rel="stylesheet"      href="/js_libs/relaxngui.css" type="text/css"/>
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                <!-- custom stuff, play arround  -->
         | 
| 55 | 
            +
                <link   rel="stylesheet"      href="css/design.css" type="text/css"/>
         | 
| 56 | 
            +
                <link   rel="stylesheet"      href="css/stats.css" type="text/css"/>
         | 
| 57 | 
            +
                <link   rel="stylesheet"      href="css/stats_standalone.css" type="text/css"/>
         | 
| 58 | 
            +
                <script type="text/javascript" src="js/stats.js"></script>
         | 
| 59 | 
            +
                <style>
         | 
| 60 | 
            +
                  [is="x-ui-"] {
         | 
| 61 | 
            +
                    overflow: scroll;
         | 
| 62 | 
            +
                  }
         | 
| 63 | 
            +
                </style>
         | 
| 64 | 
            +
              </head>
         | 
| 65 | 
            +
              <body is="x-ui-">
         | 
| 66 | 
            +
                <p>
         | 
| 67 | 
            +
                  Show ready, running and stopped instances.
         | 
| 68 | 
            +
                </p>
         | 
| 69 | 
            +
                <template id="stats_instances">
         | 
| 70 | 
            +
                  <h1 class="stats_title">Engine: </h1>
         | 
| 71 | 
            +
                  <table class='instances'></table>
         | 
| 72 | 
            +
                </template>
         | 
| 73 | 
            +
                <template id="stats_instance">
         | 
| 74 | 
            +
                  <tr class="text">
         | 
| 75 | 
            +
                    <td class="name"><a href='' target='_blank'><em>no name</em></a></td>
         | 
| 76 | 
            +
                    <td class="num">(<span></span>)</td>
         | 
| 77 | 
            +
                    <td class="state"><span class='value'></span></td>
         | 
| 78 | 
            +
                    <td class="author"><em>unknown</em></td>
         | 
| 79 | 
            +
                    <td class="cpu"></td>
         | 
| 80 | 
            +
                    <td>/</td>
         | 
| 81 | 
            +
                    <td class="mem"></em></td>
         | 
| 82 | 
            +
                  </tr>
         | 
| 83 | 
            +
                  <tr class="sub">
         | 
| 84 | 
            +
                    <td colspan="6"><table></table></td>
         | 
| 85 | 
            +
                  </tr>
         | 
| 86 | 
            +
                </template>
         | 
| 87 | 
            +
                <div id='instances'></div>
         | 
| 88 | 
            +
              </body>
         | 
| 89 | 
            +
            </html>
         | 
    
        data/ui/js/stats.js
    CHANGED
    
    | @@ -87,6 +87,7 @@ function instance_change(d) { | |
| 87 87 | 
             
            function instance_upd(uuid,name,state,author,cpu,mem,parent) {
         | 
| 88 88 | 
             
              if (name != "") {
         | 
| 89 89 | 
             
                $('[data-id=' + uuid + '] > .name a').text(name)
         | 
| 90 | 
            +
                $('[data-id=' + uuid + '] > .name a').attr('title',name)
         | 
| 90 91 | 
             
              }
         | 
| 91 92 | 
             
              $('[data-id=' + uuid + '] > .state span.value').text(state)
         | 
| 92 93 | 
             
              $('[data-id=' + uuid + '] > .state').attr('data-state',state)
         | 
| @@ -110,6 +111,7 @@ function instance_add(iname,uuid,url,name,state,author,cpu,mem,parent) { | |
| 110 111 | 
             
              $('.num span',inode).text(url.split(/[\\/]/).pop())
         | 
| 111 112 | 
             
              if (name != "") {
         | 
| 112 113 | 
             
                $('.name a',inode).text(name)
         | 
| 114 | 
            +
                $('.name a',inode).attr('title',name)
         | 
| 113 115 | 
             
              }
         | 
| 114 116 | 
             
              $('.state span.value',inode).text(state)
         | 
| 115 117 | 
             
              $('.state',inode).attr('data-state',state)
         | 
| @@ -137,6 +139,8 @@ function instances_striping(iname) { | |
| 137 139 | 
             
              })
         | 
| 138 140 | 
             
            }
         | 
| 139 141 |  | 
| 142 | 
            +
            function timer(ms) { return new Promise(res => setTimeout(res, ms)); }
         | 
| 143 | 
            +
             | 
| 140 144 | 
             
            function instances_init(ename) {
         | 
| 141 145 | 
             
              const iname = ename.replace(/[^a-z0-9A-Z]/g,'-').replace(/-$/,'')
         | 
| 142 146 | 
             
              let inode = document.importNode($("#stats_instances")[0].content,true);
         | 
| @@ -148,9 +152,9 @@ function instances_init(ename) { | |
| 148 152 | 
             
                url: 'server/dash/instances',
         | 
| 149 153 | 
             
                data: { engine: ename },
         | 
| 150 154 | 
             
                success: (result) => {
         | 
| 151 | 
            -
                  $('instance',result).each((i,ele)=>{
         | 
| 155 | 
            +
                  $('instance',result).each(async (i,ele)=>{
         | 
| 152 156 | 
             
                    const e = $(ele);
         | 
| 153 | 
            -
                    instance_add(iname,e.attr('uuid'),e.attr('url'),e.attr('name'),e.attr('state'),e.attr('author'),e.attr('cpu'),e.attr('mem'),e.attr('parent'))
         | 
| 157 | 
            +
                    setTimeout(()=>{instance_add(iname,e.attr('uuid'),e.attr('url'),e.attr('name'),e.attr('state'),e.attr('author'),e.attr('cpu'),e.attr('mem'),e.attr('parent'))},0)
         | 
| 154 158 | 
             
                  })
         | 
| 155 159 | 
             
                }
         | 
| 156 160 | 
             
              })
         | 
    
        data/ui/resources.html
    CHANGED
    
    | @@ -55,6 +55,11 @@ | |
| 55 55 | 
             
                <link   rel="stylesheet"      href="css/stats.css" type="text/css"/>
         | 
| 56 56 | 
             
                <link   rel="stylesheet"      href="css/stats_standalone.css" type="text/css"/>
         | 
| 57 57 | 
             
                <script type="text/javascript" src="js/stats.js"></script>
         | 
| 58 | 
            +
                <style>
         | 
| 59 | 
            +
                  [is="x-ui-"] {
         | 
| 60 | 
            +
                    overflow: scroll;
         | 
| 61 | 
            +
                  }
         | 
| 62 | 
            +
                </style>
         | 
| 58 63 | 
             
              </head>
         | 
| 59 64 | 
             
              <body is="x-ui-">
         | 
| 60 65 | 
             
                <p>
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: cpee-model-management
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.1. | 
| 4 | 
            +
              version: 1.1.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Juergen eTM Mangler
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: tools
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022- | 
| 11 | 
            +
            date: 2022-06-22 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: riddl
         | 
| @@ -86,6 +86,7 @@ files: | |
| 86 86 | 
             
            - ui/css/stats_standalone.css
         | 
| 87 87 | 
             
            - ui/index.html
         | 
| 88 88 | 
             
            - ui/instances.html
         | 
| 89 | 
            +
            - ui/instances_view.html
         | 
| 89 90 | 
             
            - ui/js/design.js
         | 
| 90 91 | 
             
            - ui/js/stats.js
         | 
| 91 92 | 
             
            - ui/resources.html
         |