ciocore 8.0.1__py2.py3-none-any.whl → 8.1.0b3__py2.py3-none-any.whl
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.
Potentially problematic release.
This version of ciocore might be problematic. Click here for more details.
- ciocore/VERSION +1 -1
- ciocore/api_client.py +248 -1
- ciocore/data.py +12 -4
- ciocore/docsite/apidoc/api_client/index.html +341 -0
- ciocore/docsite/apidoc/data/index.html +20 -6
- ciocore/docsite/objects.inv +0 -0
- ciocore/docsite/search/search_index.json +1 -1
- ciocore/docsite/sitemap.xml.gz +0 -0
- ciocore/package_tree.py +5 -8
- {ciocore-8.0.1.dist-info → ciocore-8.1.0b3.dist-info}/METADATA +8 -2
- {ciocore-8.0.1.dist-info → ciocore-8.1.0b3.dist-info}/RECORD +15 -15
- tests/test_api_client.py +217 -2
- {ciocore-8.0.1.dist-info → ciocore-8.1.0b3.dist-info}/WHEEL +0 -0
- {ciocore-8.0.1.dist-info → ciocore-8.1.0b3.dist-info}/entry_points.txt +0 -0
- {ciocore-8.0.1.dist-info → ciocore-8.1.0b3.dist-info}/top_level.txt +0 -0
|
@@ -653,6 +653,13 @@
|
|
|
653
653
|
account_name_from_jwt()
|
|
654
654
|
</a>
|
|
655
655
|
|
|
656
|
+
</li>
|
|
657
|
+
|
|
658
|
+
<li class="md-nav__item">
|
|
659
|
+
<a href="#ciocore.api_client.get_account_data" class="md-nav__link">
|
|
660
|
+
get_account_data()
|
|
661
|
+
</a>
|
|
662
|
+
|
|
656
663
|
</li>
|
|
657
664
|
|
|
658
665
|
<li class="md-nav__item">
|
|
@@ -709,6 +716,20 @@
|
|
|
709
716
|
kill_tasks()
|
|
710
717
|
</a>
|
|
711
718
|
|
|
719
|
+
</li>
|
|
720
|
+
|
|
721
|
+
<li class="md-nav__item">
|
|
722
|
+
<a href="#ciocore.api_client.get_compute_usage" class="md-nav__link">
|
|
723
|
+
get_compute_usage()
|
|
724
|
+
</a>
|
|
725
|
+
|
|
726
|
+
</li>
|
|
727
|
+
|
|
728
|
+
<li class="md-nav__item">
|
|
729
|
+
<a href="#ciocore.api_client.get_storage_usage" class="md-nav__link">
|
|
730
|
+
get_storage_usage()
|
|
731
|
+
</a>
|
|
732
|
+
|
|
712
733
|
</li>
|
|
713
734
|
|
|
714
735
|
</ul>
|
|
@@ -967,6 +988,13 @@
|
|
|
967
988
|
account_name_from_jwt()
|
|
968
989
|
</a>
|
|
969
990
|
|
|
991
|
+
</li>
|
|
992
|
+
|
|
993
|
+
<li class="md-nav__item">
|
|
994
|
+
<a href="#ciocore.api_client.get_account_data" class="md-nav__link">
|
|
995
|
+
get_account_data()
|
|
996
|
+
</a>
|
|
997
|
+
|
|
970
998
|
</li>
|
|
971
999
|
|
|
972
1000
|
<li class="md-nav__item">
|
|
@@ -1023,6 +1051,20 @@
|
|
|
1023
1051
|
kill_tasks()
|
|
1024
1052
|
</a>
|
|
1025
1053
|
|
|
1054
|
+
</li>
|
|
1055
|
+
|
|
1056
|
+
<li class="md-nav__item">
|
|
1057
|
+
<a href="#ciocore.api_client.get_compute_usage" class="md-nav__link">
|
|
1058
|
+
get_compute_usage()
|
|
1059
|
+
</a>
|
|
1060
|
+
|
|
1061
|
+
</li>
|
|
1062
|
+
|
|
1063
|
+
<li class="md-nav__item">
|
|
1064
|
+
<a href="#ciocore.api_client.get_storage_usage" class="md-nav__link">
|
|
1065
|
+
get_storage_usage()
|
|
1066
|
+
</a>
|
|
1067
|
+
|
|
1026
1068
|
</li>
|
|
1027
1069
|
|
|
1028
1070
|
</ul>
|
|
@@ -2364,6 +2406,67 @@ prompt the user to log in. </p>
|
|
|
2364
2406
|
|
|
2365
2407
|
|
|
2366
2408
|
|
|
2409
|
+
<h2 id="ciocore.api_client.get_account_data" class="doc doc-heading">
|
|
2410
|
+
<code class="highlight language-python"><span class="n">get_account_data</span><span class="p">()</span></code>
|
|
2411
|
+
|
|
2412
|
+
|
|
2413
|
+
</h2>
|
|
2414
|
+
|
|
2415
|
+
<div class="doc doc-contents ">
|
|
2416
|
+
|
|
2417
|
+
<p>Get the authenticated account's data.</p>
|
|
2418
|
+
|
|
2419
|
+
<p><strong>Returns:</strong></p>
|
|
2420
|
+
<table>
|
|
2421
|
+
<thead>
|
|
2422
|
+
<tr>
|
|
2423
|
+
<th>Type</th>
|
|
2424
|
+
<th>Description</th>
|
|
2425
|
+
</tr>
|
|
2426
|
+
</thead>
|
|
2427
|
+
<tbody>
|
|
2428
|
+
<tr>
|
|
2429
|
+
<td><code>dict</code></td>
|
|
2430
|
+
<td><p>The account data.</p></td>
|
|
2431
|
+
</tr>
|
|
2432
|
+
</tbody>
|
|
2433
|
+
</table>
|
|
2434
|
+
<details class="quote">
|
|
2435
|
+
<summary>Source code in <code>ciocore/api_client.py</code></summary>
|
|
2436
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">get_account_data</span><span class="p">():</span>
|
|
2437
|
+
<span class="w"> </span><span class="sd">"""</span>
|
|
2438
|
+
<span class="sd"> Get the authenticated account's data.</span>
|
|
2439
|
+
|
|
2440
|
+
<span class="sd"> Returns:</span>
|
|
2441
|
+
<span class="sd"> dict: The account data.</span>
|
|
2442
|
+
<span class="sd"> """</span>
|
|
2443
|
+
<span class="n">token</span> <span class="o">=</span> <span class="n">read_conductor_credentials</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
|
|
2444
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">token</span><span class="p">:</span>
|
|
2445
|
+
<span class="k">return</span> <span class="kc">None</span>
|
|
2446
|
+
|
|
2447
|
+
<span class="n">payload</span> <span class="o">=</span> <span class="n">jwt</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="n">token</span><span class="p">,</span> <span class="n">verify</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
|
2448
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
2449
|
+
<span class="s2">"email"</span><span class="p">:</span> <span class="n">payload</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"email"</span><span class="p">),</span>
|
|
2450
|
+
<span class="s2">"domain"</span><span class="p">:</span> <span class="s2">"."</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">payload</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"aud"</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"."</span><span class="p">)[</span><span class="mi">1</span><span class="p">:]),</span>
|
|
2451
|
+
<span class="s2">"account_id"</span> <span class="p">:</span> <span class="n">payload</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"account"</span><span class="p">),</span>
|
|
2452
|
+
<span class="s2">"user_id"</span> <span class="p">:</span> <span class="n">payload</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"id"</span><span class="p">),</span>
|
|
2453
|
+
<span class="s2">"role"</span><span class="p">:</span> <span class="n">payload</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"role"</span><span class="p">),</span>
|
|
2454
|
+
<span class="s2">"issued"</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">payload</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"iat"</span><span class="p">)),</span>
|
|
2455
|
+
<span class="s2">"expiry"</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">payload</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"exp"</span><span class="p">)),</span>
|
|
2456
|
+
<span class="s2">"token"</span><span class="p">:</span> <span class="n">token</span><span class="p">,</span>
|
|
2457
|
+
<span class="p">}</span>
|
|
2458
|
+
</code></pre></div>
|
|
2459
|
+
</details>
|
|
2460
|
+
</div>
|
|
2461
|
+
|
|
2462
|
+
</div>
|
|
2463
|
+
|
|
2464
|
+
|
|
2465
|
+
|
|
2466
|
+
<div class="doc doc-object doc-function">
|
|
2467
|
+
|
|
2468
|
+
|
|
2469
|
+
|
|
2367
2470
|
<h2 id="ciocore.api_client.request_instance_types" class="doc doc-heading">
|
|
2368
2471
|
<code class="highlight language-python"><span class="n">request_instance_types</span><span class="p">(</span><span class="n">as_dict</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
|
|
2369
2472
|
|
|
@@ -3138,6 +3241,244 @@ prompt the user to log in. </p>
|
|
|
3138
3241
|
|
|
3139
3242
|
|
|
3140
3243
|
|
|
3244
|
+
<div class="doc doc-object doc-function">
|
|
3245
|
+
|
|
3246
|
+
|
|
3247
|
+
|
|
3248
|
+
<h2 id="ciocore.api_client.get_compute_usage" class="doc doc-heading">
|
|
3249
|
+
<code class="highlight language-python"><span class="n">get_compute_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">)</span></code>
|
|
3250
|
+
|
|
3251
|
+
|
|
3252
|
+
</h2>
|
|
3253
|
+
|
|
3254
|
+
<div class="doc doc-contents ">
|
|
3255
|
+
|
|
3256
|
+
<p>Query the compute usage for an account.</p>
|
|
3257
|
+
<p>Compute includes licenses, instances and Conductor cost. Everything involved
|
|
3258
|
+
with running a job. </p>
|
|
3259
|
+
|
|
3260
|
+
<p><strong>Parameters:</strong></p>
|
|
3261
|
+
<table>
|
|
3262
|
+
<thead>
|
|
3263
|
+
<tr>
|
|
3264
|
+
<th>Name</th>
|
|
3265
|
+
<th>Type</th>
|
|
3266
|
+
<th>Description</th>
|
|
3267
|
+
<th>Default</th>
|
|
3268
|
+
</tr>
|
|
3269
|
+
</thead>
|
|
3270
|
+
<tbody>
|
|
3271
|
+
<tr>
|
|
3272
|
+
<td><code>start_time</code></td>
|
|
3273
|
+
<td><code>datetime.datetime</code></td>
|
|
3274
|
+
<td><p>The first day to include in the report. Only the date is considered and it's assumed to be in UTC.</p></td>
|
|
3275
|
+
<td><em>required</em></td>
|
|
3276
|
+
</tr>
|
|
3277
|
+
<tr>
|
|
3278
|
+
<td><code>end_time</code></td>
|
|
3279
|
+
<td><code>datetime.datetime</code></td>
|
|
3280
|
+
<td><p>The last day to include in the report. Only the date is considered and it's assumed to be in UTC.</p></td>
|
|
3281
|
+
<td><em>required</em></td>
|
|
3282
|
+
</tr>
|
|
3283
|
+
</tbody>
|
|
3284
|
+
</table>
|
|
3285
|
+
<p><strong>Returns:</strong></p>
|
|
3286
|
+
<table>
|
|
3287
|
+
<thead>
|
|
3288
|
+
<tr>
|
|
3289
|
+
<th>Type</th>
|
|
3290
|
+
<th>Description</th>
|
|
3291
|
+
</tr>
|
|
3292
|
+
</thead>
|
|
3293
|
+
<tbody>
|
|
3294
|
+
<tr>
|
|
3295
|
+
<td><code>dict</code></td>
|
|
3296
|
+
<td><p>Each key is a date (UTC). The value is a dict with values for:
|
|
3297
|
+
- cost: The total accumulated compute cost for the day
|
|
3298
|
+
- corehours: The total accumulated core hours for the day
|
|
3299
|
+
- walltime: The number of minutes that instances (regardless of type) were running</p></td>
|
|
3300
|
+
</tr>
|
|
3301
|
+
</tbody>
|
|
3302
|
+
</table>
|
|
3303
|
+
<p><strong>Examples:</strong></p>
|
|
3304
|
+
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span> <span class="nn">ciocore</span> <span class="kn">import</span> <span class="n">api_client</span>
|
|
3305
|
+
<span class="o">>>></span> <span class="n">api_client</span><span class="o">.</span><span class="n">get_compute_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">)</span>
|
|
3306
|
+
<span class="p">{</span> <span class="s1">'2024-01-09'</span><span class="p">:</span> <span class="p">{</span> <span class="s1">'cost'</span><span class="p">:</span> <span class="mf">0.08</span><span class="p">,</span>
|
|
3307
|
+
<span class="s1">'corehours'</span><span class="p">:</span> <span class="mf">0.9</span><span class="p">,</span>
|
|
3308
|
+
<span class="s1">'walltime'</span><span class="p">:</span> <span class="mf">13.93</span><span class="p">},</span>
|
|
3309
|
+
<span class="s1">'2024-01-16'</span><span class="p">:</span> <span class="p">{</span> <span class="s1">'cost'</span><span class="p">:</span> <span class="mf">0.12</span><span class="p">,</span>
|
|
3310
|
+
<span class="s1">'corehours'</span><span class="p">:</span> <span class="mf">0.9613</span><span class="p">,</span>
|
|
3311
|
+
<span class="s1">'walltime'</span><span class="p">:</span> <span class="mf">7.21</span><span class="p">}}</span>
|
|
3312
|
+
</code></pre></div>
|
|
3313
|
+
|
|
3314
|
+
<details class="quote">
|
|
3315
|
+
<summary>Source code in <code>ciocore/api_client.py</code></summary>
|
|
3316
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">get_compute_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">):</span>
|
|
3317
|
+
<span class="w"> </span><span class="sd">'''</span>
|
|
3318
|
+
<span class="sd"> Query the compute usage for an account.</span>
|
|
3319
|
+
|
|
3320
|
+
<span class="sd"> Compute includes licenses, instances and Conductor cost. Everything involved</span>
|
|
3321
|
+
<span class="sd"> with running a job. </span>
|
|
3322
|
+
|
|
3323
|
+
<span class="sd"> Args:</span>
|
|
3324
|
+
<span class="sd"> start_time (datetime.datetime): The first day to include in the report. Only the date is considered and it's assumed to be in UTC.</span>
|
|
3325
|
+
<span class="sd"> end_time (datetime.datetime): The last day to include in the report. Only the date is considered and it's assumed to be in UTC.</span>
|
|
3326
|
+
|
|
3327
|
+
<span class="sd"> Returns:</span>
|
|
3328
|
+
<span class="sd"> dict: Each key is a date (UTC). The value is a dict with values for:</span>
|
|
3329
|
+
<span class="sd"> - cost: The total accumulated compute cost for the day</span>
|
|
3330
|
+
<span class="sd"> - corehours: The total accumulated core hours for the day</span>
|
|
3331
|
+
<span class="sd"> - walltime: The number of minutes that instances (regardless of type) were running</span>
|
|
3332
|
+
|
|
3333
|
+
<span class="sd"> Examples:</span>
|
|
3334
|
+
<span class="sd"> >>> from ciocore import api_client</span>
|
|
3335
|
+
<span class="sd"> >>> api_client.get_compute_usage(start_time, end_time)</span>
|
|
3336
|
+
<span class="sd"> { '2024-01-09': { 'cost': 0.08,</span>
|
|
3337
|
+
<span class="sd"> 'corehours': 0.9, </span>
|
|
3338
|
+
<span class="sd"> 'walltime': 13.93},</span>
|
|
3339
|
+
<span class="sd"> '2024-01-16': { 'cost': 0.12,</span>
|
|
3340
|
+
<span class="sd"> 'corehours': 0.9613, </span>
|
|
3341
|
+
<span class="sd"> 'walltime': 7.21}}</span>
|
|
3342
|
+
<span class="sd"> '''</span>
|
|
3343
|
+
<span class="n">date_format</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%a</span><span class="s2">, </span><span class="si">%d</span><span class="s2"> %b %Y %H:%M:%S %Z"</span>
|
|
3344
|
+
<span class="n">data</span> <span class="o">=</span> <span class="n">_get_compute_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">)</span>
|
|
3345
|
+
|
|
3346
|
+
<span class="c1"># Create a nested default dictionary with initial float values of 0.0</span>
|
|
3347
|
+
<span class="n">results</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">defaultdict</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="n">collections</span><span class="o">.</span><span class="n">defaultdict</span><span class="p">(</span><span class="nb">float</span><span class="p">))</span>
|
|
3348
|
+
|
|
3349
|
+
<span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
|
|
3350
|
+
<span class="n">entry_start_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">entry</span><span class="p">[</span><span class="s1">'start_time'</span><span class="p">],</span> <span class="n">date_format</span><span class="p">)</span><span class="o">.</span><span class="n">date</span><span class="p">()</span><span class="o">.</span><span class="n">isoformat</span><span class="p">()</span>
|
|
3351
|
+
|
|
3352
|
+
<span class="n">results</span><span class="p">[</span><span class="n">entry_start_date</span><span class="p">][</span><span class="s1">'walltime'</span><span class="p">]</span> <span class="o">+=</span> <span class="n">entry</span><span class="p">[</span><span class="s1">'minutes'</span><span class="p">]</span>
|
|
3353
|
+
<span class="n">results</span><span class="p">[</span><span class="n">entry_start_date</span><span class="p">][</span><span class="s1">'corehours'</span><span class="p">]</span> <span class="o">+=</span> <span class="n">entry</span><span class="p">[</span><span class="s1">'cores'</span><span class="p">]</span>
|
|
3354
|
+
<span class="n">results</span><span class="p">[</span><span class="n">entry_start_date</span><span class="p">][</span><span class="s1">'cost'</span><span class="p">]</span> <span class="o">+=</span> <span class="n">entry</span><span class="p">[</span><span class="s1">'license_cost'</span><span class="p">]</span> <span class="o">+</span> <span class="n">entry</span><span class="p">[</span><span class="s1">'instance_cost'</span><span class="p">]</span>
|
|
3355
|
+
|
|
3356
|
+
<span class="c1"># Round the data to avoid FP errors</span>
|
|
3357
|
+
<span class="n">results</span><span class="p">[</span><span class="n">entry_start_date</span><span class="p">][</span><span class="s1">'walltime'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">round</span><span class="p">(</span><span class="n">results</span><span class="p">[</span><span class="n">entry_start_date</span><span class="p">][</span><span class="s1">'walltime'</span><span class="p">],</span> <span class="mi">4</span><span class="p">)</span>
|
|
3358
|
+
<span class="n">results</span><span class="p">[</span><span class="n">entry_start_date</span><span class="p">][</span><span class="s1">'corehours'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">round</span><span class="p">(</span><span class="n">results</span><span class="p">[</span><span class="n">entry_start_date</span><span class="p">][</span><span class="s1">'corehours'</span><span class="p">],</span> <span class="mi">4</span><span class="p">)</span>
|
|
3359
|
+
<span class="n">results</span><span class="p">[</span><span class="n">entry_start_date</span><span class="p">][</span><span class="s1">'cost'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">round</span><span class="p">(</span><span class="n">results</span><span class="p">[</span><span class="n">entry_start_date</span><span class="p">][</span><span class="s1">'cost'</span><span class="p">],</span> <span class="mi">4</span><span class="p">)</span>
|
|
3360
|
+
|
|
3361
|
+
<span class="k">return</span> <span class="n">results</span>
|
|
3362
|
+
</code></pre></div>
|
|
3363
|
+
</details>
|
|
3364
|
+
</div>
|
|
3365
|
+
|
|
3366
|
+
</div>
|
|
3367
|
+
|
|
3368
|
+
|
|
3369
|
+
|
|
3370
|
+
<div class="doc doc-object doc-function">
|
|
3371
|
+
|
|
3372
|
+
|
|
3373
|
+
|
|
3374
|
+
<h2 id="ciocore.api_client.get_storage_usage" class="doc doc-heading">
|
|
3375
|
+
<code class="highlight language-python"><span class="n">get_storage_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">)</span></code>
|
|
3376
|
+
|
|
3377
|
+
|
|
3378
|
+
</h2>
|
|
3379
|
+
|
|
3380
|
+
<div class="doc doc-contents ">
|
|
3381
|
+
|
|
3382
|
+
<p>Query the storage usage for an account.</p>
|
|
3383
|
+
<p>Storage is calculated twice a day (UTC) and the average is used.</p>
|
|
3384
|
+
|
|
3385
|
+
<p><strong>Parameters:</strong></p>
|
|
3386
|
+
<table>
|
|
3387
|
+
<thead>
|
|
3388
|
+
<tr>
|
|
3389
|
+
<th>Name</th>
|
|
3390
|
+
<th>Type</th>
|
|
3391
|
+
<th>Description</th>
|
|
3392
|
+
<th>Default</th>
|
|
3393
|
+
</tr>
|
|
3394
|
+
</thead>
|
|
3395
|
+
<tbody>
|
|
3396
|
+
<tr>
|
|
3397
|
+
<td><code>start_time</code></td>
|
|
3398
|
+
<td><code>datetime.datetime</code></td>
|
|
3399
|
+
<td><p>The first day to include in the report. Only the date is considered and it's assumed to be in UTC.</p></td>
|
|
3400
|
+
<td><em>required</em></td>
|
|
3401
|
+
</tr>
|
|
3402
|
+
<tr>
|
|
3403
|
+
<td><code>end_time</code></td>
|
|
3404
|
+
<td><code>datetime.datetime</code></td>
|
|
3405
|
+
<td><p>The last day to include in the report. Only the date is considered and it's assumed to be in UTC.</p></td>
|
|
3406
|
+
<td><em>required</em></td>
|
|
3407
|
+
</tr>
|
|
3408
|
+
</tbody>
|
|
3409
|
+
</table>
|
|
3410
|
+
<p><strong>Returns:</strong></p>
|
|
3411
|
+
<table>
|
|
3412
|
+
<thead>
|
|
3413
|
+
<tr>
|
|
3414
|
+
<th>Type</th>
|
|
3415
|
+
<th>Description</th>
|
|
3416
|
+
</tr>
|
|
3417
|
+
</thead>
|
|
3418
|
+
<tbody>
|
|
3419
|
+
<tr>
|
|
3420
|
+
<td><code>dict</code></td>
|
|
3421
|
+
<td><p>Each key is a date (UTC). The value is a dict with values for:
|
|
3422
|
+
- cost: The cost of accumulated storage for that one day
|
|
3423
|
+
- GiB: The total amount of storage used on that day</p></td>
|
|
3424
|
+
</tr>
|
|
3425
|
+
</tbody>
|
|
3426
|
+
</table>
|
|
3427
|
+
<p><strong>Examples:</strong></p>
|
|
3428
|
+
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span> <span class="nn">ciocore</span> <span class="kn">import</span> <span class="n">api_client</span>
|
|
3429
|
+
<span class="o">>>></span> <span class="n">api_client</span><span class="o">.</span><span class="n">get_storage_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">)</span>
|
|
3430
|
+
<span class="p">{</span> <span class="s1">'2024-01-01'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'cost'</span><span class="p">:</span> <span class="mf">4.022</span><span class="p">,</span> <span class="s1">'GiB'</span><span class="p">:</span> <span class="mf">679.714</span><span class="p">},</span>
|
|
3431
|
+
<span class="s1">'2024-01-02'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'cost'</span><span class="p">:</span> <span class="mf">4.502</span><span class="p">,</span> <span class="s1">'GiB'</span><span class="p">:</span> <span class="mf">750.34</span><span class="p">},</span>
|
|
3432
|
+
<span class="s1">'2024-01-03'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'cost'</span><span class="p">:</span> <span class="mf">4.502</span><span class="p">,</span> <span class="s1">'GiB'</span><span class="p">:</span> <span class="mf">750.34</span><span class="p">}}</span>
|
|
3433
|
+
</code></pre></div>
|
|
3434
|
+
|
|
3435
|
+
<details class="quote">
|
|
3436
|
+
<summary>Source code in <code>ciocore/api_client.py</code></summary>
|
|
3437
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">get_storage_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">):</span>
|
|
3438
|
+
<span class="w"> </span><span class="sd">'''</span>
|
|
3439
|
+
<span class="sd"> Query the storage usage for an account.</span>
|
|
3440
|
+
|
|
3441
|
+
<span class="sd"> Storage is calculated twice a day (UTC) and the average is used.</span>
|
|
3442
|
+
|
|
3443
|
+
<span class="sd"> Args:</span>
|
|
3444
|
+
<span class="sd"> start_time (datetime.datetime): The first day to include in the report. Only the date is considered and it's assumed to be in UTC.</span>
|
|
3445
|
+
<span class="sd"> end_time (datetime.datetime): The last day to include in the report. Only the date is considered and it's assumed to be in UTC.</span>
|
|
3446
|
+
|
|
3447
|
+
<span class="sd"> Returns:</span>
|
|
3448
|
+
<span class="sd"> dict: Each key is a date (UTC). The value is a dict with values for:</span>
|
|
3449
|
+
<span class="sd"> - cost: The cost of accumulated storage for that one day</span>
|
|
3450
|
+
<span class="sd"> - GiB: The total amount of storage used on that day</span>
|
|
3451
|
+
|
|
3452
|
+
<span class="sd"> Examples:</span>
|
|
3453
|
+
<span class="sd"> >>> from ciocore import api_client</span>
|
|
3454
|
+
<span class="sd"> >>> api_client.get_storage_usage(start_time, end_time)</span>
|
|
3455
|
+
<span class="sd"> { '2024-01-01': {'cost': 4.022, 'GiB': 679.714},</span>
|
|
3456
|
+
<span class="sd"> '2024-01-02': {'cost': 4.502, 'GiB': 750.34},</span>
|
|
3457
|
+
<span class="sd"> '2024-01-03': {'cost': 4.502, 'GiB': 750.34}}</span>
|
|
3458
|
+
<span class="sd"> '''</span>
|
|
3459
|
+
<span class="n">one_day</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
3460
|
+
|
|
3461
|
+
<span class="n">data</span> <span class="o">=</span> <span class="n">_get_storage_usage</span><span class="p">(</span><span class="n">start_time</span><span class="p">,</span> <span class="n">end_time</span><span class="p">)</span>
|
|
3462
|
+
|
|
3463
|
+
<span class="n">results</span> <span class="o">=</span> <span class="p">{}</span>
|
|
3464
|
+
|
|
3465
|
+
<span class="n">entry_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s1">'start_date'</span><span class="p">])</span>
|
|
3466
|
+
|
|
3467
|
+
<span class="k">for</span> <span class="n">cnt</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s2">"cost_per_day"</span><span class="p">]):</span>
|
|
3468
|
+
|
|
3469
|
+
<span class="n">entry_start_date</span> <span class="o">=</span> <span class="n">entry_date</span><span class="o">.</span><span class="n">isoformat</span><span class="p">()</span>
|
|
3470
|
+
<span class="n">results</span><span class="p">[</span><span class="n">entry_start_date</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'cost'</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">entry</span><span class="p">),</span> <span class="s1">'GiB'</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s1">'gibs_per_day'</span><span class="p">][</span><span class="n">cnt</span><span class="p">])}</span>
|
|
3471
|
+
<span class="n">entry_date</span> <span class="o">+=</span> <span class="n">one_day</span>
|
|
3472
|
+
|
|
3473
|
+
<span class="k">return</span> <span class="n">results</span>
|
|
3474
|
+
</code></pre></div>
|
|
3475
|
+
</details>
|
|
3476
|
+
</div>
|
|
3477
|
+
|
|
3478
|
+
</div>
|
|
3479
|
+
|
|
3480
|
+
|
|
3481
|
+
|
|
3141
3482
|
|
|
3142
3483
|
|
|
3143
3484
|
|
|
@@ -991,7 +991,7 @@
|
|
|
991
991
|
|
|
992
992
|
<div class="doc doc-contents ">
|
|
993
993
|
|
|
994
|
-
<p>Provide projects, instance types,
|
|
994
|
+
<p>Provide projects, instance types, software package, and account data.</p>
|
|
995
995
|
|
|
996
996
|
<p><strong>Keyword arguments:</strong></p>
|
|
997
997
|
<table>
|
|
@@ -1036,11 +1036,11 @@
|
|
|
1036
1036
|
<tbody>
|
|
1037
1037
|
<tr>
|
|
1038
1038
|
<td><code>dict</code></td>
|
|
1039
|
-
<td><p>Keys are <code>projects</code>, <code>instance_types</code>, <code>software</code>.</p></td>
|
|
1039
|
+
<td><p>Keys are <code>projects</code>, <code>instance_types</code>, <code>software</code>, <code>account</code>.</p></td>
|
|
1040
1040
|
</tr>
|
|
1041
1041
|
</tbody>
|
|
1042
1042
|
</table> <p>When you access the data, if it has already been fetched, it will be returned. Otherwise,
|
|
1043
|
-
requests will be made to fetch
|
|
1043
|
+
requests will be made to fetch fresh data. You may need to authenticate in order to access the
|
|
1044
1044
|
data.</p>
|
|
1045
1045
|
<p>The set of instance types and software can be pruned to match the available platforms
|
|
1046
1046
|
represented by each other. For example, if the instance types come from an orchestrator that
|
|
@@ -1061,6 +1061,9 @@ available machines configurations.</p>
|
|
|
1061
1061
|
<p><strong>software</strong> is a PackageTree object containing either all
|
|
1062
1062
|
the software available at Conductor, or a subset based on specified products.</p>
|
|
1063
1063
|
</li>
|
|
1064
|
+
<li>
|
|
1065
|
+
<p><strong>account</strong> is a dictionary containing account information gained from the JWT token.</p>
|
|
1066
|
+
</li>
|
|
1064
1067
|
</ul>
|
|
1065
1068
|
|
|
1066
1069
|
<p><strong>Examples:</strong></p>
|
|
@@ -1075,13 +1078,16 @@ the software available at Conductor, or a subset based on specified products.</p
|
|
|
1075
1078
|
</code></pre></div>
|
|
1076
1079
|
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="n">coredata</span><span class="o">.</span><span class="n">data</span><span class="p">()[</span><span class="s2">"instance_types"</span><span class="p">]</span>
|
|
1077
1080
|
<span class="o"><</span><span class="n">ciocore</span><span class="o">.</span><span class="n">hardware_set</span><span class="o">.</span><span class="n">HardwareSet</span> <span class="nb">object</span> <span class="n">at</span> <span class="mh">0x0000028941CD9DC0</span><span class="o">></span>
|
|
1081
|
+
</code></pre></div>
|
|
1082
|
+
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="n">coredata</span><span class="o">.</span><span class="n">data</span><span class="p">()[</span><span class="s2">"account"</span><span class="p">][</span><span class="s2">"account_id"</span><span class="p">]</span>
|
|
1083
|
+
<span class="mi">123456789012</span>
|
|
1078
1084
|
</code></pre></div>
|
|
1079
1085
|
|
|
1080
1086
|
<details class="quote">
|
|
1081
1087
|
<summary>Source code in <code>ciocore/data.py</code></summary>
|
|
1082
1088
|
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">data</span><span class="p">(</span><span class="n">force</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
1083
1089
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1084
|
-
<span class="sd"> Provide projects, instance types,
|
|
1090
|
+
<span class="sd"> Provide projects, instance types, software package, and account data.</span>
|
|
1085
1091
|
|
|
1086
1092
|
<span class="sd"> Keyword Args:</span>
|
|
1087
1093
|
<span class="sd"> force: (bool) If `True`, then force the system to fetch fresh data -- Defaults to `False`.</span>
|
|
@@ -1090,10 +1096,10 @@ the software available at Conductor, or a subset based on specified products.</p
|
|
|
1090
1096
|
<span class="sd"> ValueError: Module was not initialized with [init()](/data/#ciocore.data.init).</span>
|
|
1091
1097
|
|
|
1092
1098
|
<span class="sd"> Returns:</span>
|
|
1093
|
-
<span class="sd"> dict: Keys are `projects`, `instance_types`, `software`.</span>
|
|
1099
|
+
<span class="sd"> dict: Keys are `projects`, `instance_types`, `software`, `account`.</span>
|
|
1094
1100
|
|
|
1095
1101
|
<span class="sd"> When you access the data, if it has already been fetched, it will be returned. Otherwise,</span>
|
|
1096
|
-
<span class="sd"> requests will be made to fetch
|
|
1102
|
+
<span class="sd"> requests will be made to fetch fresh data. You may need to authenticate in order to access the</span>
|
|
1097
1103
|
<span class="sd"> data.</span>
|
|
1098
1104
|
|
|
1099
1105
|
<span class="sd"> The set of instance types and software can be pruned to match the available platforms</span>
|
|
@@ -1113,6 +1119,7 @@ the software available at Conductor, or a subset based on specified products.</p
|
|
|
1113
1119
|
<span class="sd"> * **software** is a PackageTree object containing either all</span>
|
|
1114
1120
|
<span class="sd"> the software available at Conductor, or a subset based on specified products.</span>
|
|
1115
1121
|
|
|
1122
|
+
<span class="sd"> * **account** is a dictionary containing account information gained from the JWT token.</span>
|
|
1116
1123
|
|
|
1117
1124
|
<span class="sd"> Examples:</span>
|
|
1118
1125
|
<span class="sd"> >>> from ciocore import data as coredata</span>
|
|
@@ -1126,6 +1133,10 @@ the software available at Conductor, or a subset based on specified products.</p
|
|
|
1126
1133
|
|
|
1127
1134
|
<span class="sd"> >>> coredata.data()["instance_types"]</span>
|
|
1128
1135
|
<span class="sd"> <ciocore.hardware_set.HardwareSet object at 0x0000028941CD9DC0></span>
|
|
1136
|
+
|
|
1137
|
+
<span class="sd"> >>> coredata.data()["account"]["account_id"]</span>
|
|
1138
|
+
<span class="sd"> 123456789012</span>
|
|
1139
|
+
|
|
1129
1140
|
<span class="sd"> """</span>
|
|
1130
1141
|
|
|
1131
1142
|
<span class="k">global</span> <span class="n">__data__</span>
|
|
@@ -1158,6 +1169,9 @@ the software available at Conductor, or a subset based on specified products.</p
|
|
|
1158
1169
|
<span class="k">pass</span>
|
|
1159
1170
|
<span class="n">__data__</span><span class="p">[</span><span class="s2">"extra_environment"</span><span class="p">]</span> <span class="o">=</span> <span class="n">extra_env_vars</span>
|
|
1160
1171
|
|
|
1172
|
+
<span class="n">__data__</span><span class="p">[</span><span class="s2">"account"</span><span class="p">]</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">get_account_data</span><span class="p">()</span>
|
|
1173
|
+
|
|
1174
|
+
|
|
1161
1175
|
<span class="c1"># PLATFORMS</span>
|
|
1162
1176
|
<span class="n">it_platforms</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="n">it</span><span class="p">[</span><span class="s2">"operating_system"</span><span class="p">]</span> <span class="k">for</span> <span class="n">it</span> <span class="ow">in</span> <span class="n">instance_types</span><span class="p">])</span>
|
|
1163
1177
|
<span class="n">valid_platforms</span> <span class="o">=</span> <span class="n">it_platforms</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="n">__platforms__</span><span class="p">)</span>
|
ciocore/docsite/objects.inv
CHANGED
|
Binary file
|