1287 lines
105 KiB
HTML
1287 lines
105 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en" data-bs-theme="light">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<meta name="author" content="dceoy">
|
|
<link rel="canonical" href="https://github.com/dceoy/mt5cli/api/grafana/">
|
|
<link rel="shortcut icon" href="../../img/favicon.ico">
|
|
<title>Grafana - mt5cli API Documentation</title>
|
|
<link href="../../css/bootstrap.min.css" rel="stylesheet">
|
|
<link href="../../css/fontawesome.min.css" rel="stylesheet">
|
|
<link href="../../css/brands.min.css" rel="stylesheet">
|
|
<link href="../../css/solid.min.css" rel="stylesheet">
|
|
<link href="../../css/v4-font-face.min.css" rel="stylesheet">
|
|
<link href="../../css/base.css" rel="stylesheet">
|
|
<link id="hljs-light" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" >
|
|
<link id="hljs-dark" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github-dark.min.css" disabled>
|
|
<link href="../../assets/_mkdocstrings.css" rel="stylesheet">
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
|
|
<script>hljs.highlightAll();</script>
|
|
</head>
|
|
|
|
<body>
|
|
<div class="navbar fixed-top navbar-expand-lg navbar-dark bg-primary">
|
|
<div class="container">
|
|
<a class="navbar-brand" href="../..">mt5cli API Documentation</a>
|
|
<!-- Expander button -->
|
|
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbar-collapse" aria-controls="navbar-collapse" aria-expanded="false" aria-label="Toggle navigation">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
|
|
<!-- Expanded navigation -->
|
|
<div id="navbar-collapse" class="navbar-collapse collapse">
|
|
<!-- Main navigation -->
|
|
<ul class="nav navbar-nav">
|
|
<li class="nav-item">
|
|
<a href="../.." class="nav-link">Home</a>
|
|
</li>
|
|
<li class="nav-item dropdown">
|
|
<a href="#" class="nav-link dropdown-toggle active" aria-current="page" role="button" data-bs-toggle="dropdown" aria-expanded="false">API Reference</a>
|
|
<ul class="dropdown-menu">
|
|
|
|
<li>
|
|
<a href="../" class="dropdown-item">Overview</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../public-contract/" class="dropdown-item">Public API Contract</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../client/" class="dropdown-item">Client</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../schemas/" class="dropdown-item">Schemas</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../converters/" class="dropdown-item">Converters</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../exceptions/" class="dropdown-item">Exceptions</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../cli/" class="dropdown-item">CLI</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../sdk/" class="dropdown-item">SDK</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../trading/" class="dropdown-item">Trading</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../history/" class="dropdown-item">History Collection (SQLite)</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../telemetry/" class="dropdown-item">Telemetry</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="./" class="dropdown-item active" aria-current="page">Grafana</a>
|
|
</li>
|
|
|
|
<li>
|
|
<a href="../utils/" class="dropdown-item">Utils</a>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<ul class="nav navbar-nav ms-md-auto">
|
|
<li class="nav-item">
|
|
<a href="#" class="nav-link" data-bs-toggle="modal" data-bs-target="#mkdocs_search_modal">
|
|
<i class="fa fa-search"></i> Search
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a rel="prev" href="../telemetry/" class="nav-link">
|
|
<i class="fa fa-arrow-left"></i> Previous
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a rel="next" href="../utils/" class="nav-link">
|
|
Next <i class="fa fa-arrow-right"></i>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="https://github.com/dceoy/mt5cli/edit/master/docs/api/grafana.md" class="nav-link">Edit on dceoy/mt5cli
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-md-3"><div class="navbar-expand-md bs-sidebar hidden-print affix" role="complementary">
|
|
<div class="navbar-header">
|
|
<button type="button" class="navbar-toggler collapsed" data-bs-toggle="collapse" data-bs-target="#toc-collapse" title="Table of Contents">
|
|
<span class="fa fa-angle-down"></span>
|
|
</button>
|
|
</div>
|
|
|
|
|
|
<div id="toc-collapse" class="navbar-collapse collapse card bg-body-tertiary">
|
|
<ul class="nav flex-column">
|
|
|
|
<li class="nav-item" data-bs-level="1"><a href="#grafana" class="nav-link">Grafana</a>
|
|
<ul class="nav flex-column">
|
|
<li class="nav-item" data-bs-level="2"><a href="#mt5cli.grafana" class="nav-link">grafana</a>
|
|
<ul class="nav flex-column">
|
|
</ul>
|
|
</li>
|
|
<li class="nav-item" data-bs-level="2"><a href="#grafana-ready-sqlite-workflow" class="nav-link">Grafana-ready SQLite workflow</a>
|
|
<ul class="nav flex-column">
|
|
</ul>
|
|
</li>
|
|
<li class="nav-item" data-bs-level="2"><a href="#main-apis" class="nav-link">Main APIs</a>
|
|
<ul class="nav flex-column">
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div></div>
|
|
<div class="col-md-9" role="main">
|
|
|
|
<h1 id="grafana">Grafana<a class="headerlink" href="#grafana" title="Permanent link">¶</a></h1>
|
|
|
|
|
|
<div class="doc doc-object doc-module">
|
|
|
|
|
|
|
|
<h2 id="mt5cli.grafana" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-module-name">mt5cli.grafana</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana" class="headerlink" title="Permanent link">¶</a></h2>
|
|
|
|
<div class="doc doc-contents first">
|
|
|
|
<p>Grafana-oriented SQLite views, indexes, and snapshot tables.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-attribute">
|
|
|
|
|
|
|
|
<h3 id="mt5cli.grafana.logger" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-attribute-name">logger</span>
|
|
|
|
|
|
<span class="doc doc-labels">
|
|
<small class="doc doc-label doc-label-module-attribute"><code>module-attribute</code></small>
|
|
</span>
|
|
|
|
<a href="#mt5cli.grafana.logger" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="n">logger</span> <span class="o">=</span> <span class="n"><span title="logging.getLogger">getLogger</span></span><span class="p">(</span><span class="n"><span title="__name__">__name__</span></span><span class="p">)</span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="mt5cli.grafana.create_grafana_indexes" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-function-name">create_grafana_indexes</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana.create_grafana_indexes" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">create_grafana_indexes</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n"><span title="sqlite3.Connection">Connection</span></span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Create Grafana query performance indexes idempotently.</p>
|
|
|
|
|
|
<details class="mkdocstrings-source">
|
|
<summary>Source code in <code>mt5cli/grafana.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-422">422</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-423">423</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-424">424</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-425">425</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-426">426</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-427">427</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-428">428</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-429">429</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-430">430</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-431">431</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-432">432</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-433">433</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-434">434</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-435">435</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-436">436</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-437">437</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-438">438</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-439">439</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-440">440</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-441">441</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-442">442</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-443">443</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-444">444</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-445">445</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-446">446</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-447">447</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-448">448</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-449">449</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-450">450</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-451">451</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-452">452</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-453">453</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-454">454</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-455">455</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-456">456</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-457">457</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-458">458</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-459">459</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-460">460</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-461">461</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-462">462</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-463">463</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-464">464</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-465">465</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-466">466</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-467">467</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-468">468</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-469">469</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-470">470</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-471">471</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-472">472</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-473">473</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-474">474</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-475">475</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-422" name="__codelineno-0-422"></a><span class="k">def</span><span class="w"> </span><span class="nf">create_grafana_indexes</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
<a id="__codelineno-0-423" name="__codelineno-0-423"></a><span class="w"> </span><span class="sd">"""Create Grafana query performance indexes idempotently."""</span>
|
|
<a id="__codelineno-0-424" name="__codelineno-0-424"></a> <span class="n">rates_cols</span> <span class="o">=</span> <span class="n">get_table_columns</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"rates"</span><span class="p">)</span>
|
|
<a id="__codelineno-0-425" name="__codelineno-0-425"></a> <span class="k">if</span> <span class="p">{</span><span class="s2">"time"</span><span class="p">,</span> <span class="s2">"symbol"</span><span class="p">,</span> <span class="s2">"timeframe"</span><span class="p">}</span><span class="o">.</span><span class="n">issubset</span><span class="p">(</span><span class="n">rates_cols</span><span class="p">):</span>
|
|
<a id="__codelineno-0-426" name="__codelineno-0-426"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-427" name="__codelineno-0-427"></a> <span class="s2">"CREATE INDEX IF NOT EXISTS idx_rates_time_symbol_timeframe"</span>
|
|
<a id="__codelineno-0-428" name="__codelineno-0-428"></a> <span class="s1">' ON "rates"("time", "symbol", "timeframe")'</span><span class="p">,</span>
|
|
<a id="__codelineno-0-429" name="__codelineno-0-429"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-430" name="__codelineno-0-430"></a>
|
|
<a id="__codelineno-0-431" name="__codelineno-0-431"></a> <span class="n">ticks_cols</span> <span class="o">=</span> <span class="n">get_table_columns</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"ticks"</span><span class="p">)</span>
|
|
<a id="__codelineno-0-432" name="__codelineno-0-432"></a> <span class="k">if</span> <span class="p">{</span><span class="s2">"time"</span><span class="p">,</span> <span class="s2">"symbol"</span><span class="p">}</span><span class="o">.</span><span class="n">issubset</span><span class="p">(</span><span class="n">ticks_cols</span><span class="p">):</span>
|
|
<a id="__codelineno-0-433" name="__codelineno-0-433"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-434" name="__codelineno-0-434"></a> <span class="s2">"CREATE INDEX IF NOT EXISTS idx_ticks_time_symbol"</span>
|
|
<a id="__codelineno-0-435" name="__codelineno-0-435"></a> <span class="s1">' ON "ticks"("time", "symbol")'</span><span class="p">,</span>
|
|
<a id="__codelineno-0-436" name="__codelineno-0-436"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-437" name="__codelineno-0-437"></a>
|
|
<a id="__codelineno-0-438" name="__codelineno-0-438"></a> <span class="n">deals_cols</span> <span class="o">=</span> <span class="n">get_table_columns</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"history_deals"</span><span class="p">)</span>
|
|
<a id="__codelineno-0-439" name="__codelineno-0-439"></a> <span class="k">if</span> <span class="p">{</span><span class="s2">"time"</span><span class="p">,</span> <span class="s2">"symbol"</span><span class="p">}</span><span class="o">.</span><span class="n">issubset</span><span class="p">(</span><span class="n">deals_cols</span><span class="p">):</span>
|
|
<a id="__codelineno-0-440" name="__codelineno-0-440"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-441" name="__codelineno-0-441"></a> <span class="s2">"CREATE INDEX IF NOT EXISTS idx_history_deals_time_symbol"</span>
|
|
<a id="__codelineno-0-442" name="__codelineno-0-442"></a> <span class="s1">' ON "history_deals"("time", "symbol")'</span><span class="p">,</span>
|
|
<a id="__codelineno-0-443" name="__codelineno-0-443"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-444" name="__codelineno-0-444"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-445" name="__codelineno-0-445"></a> <span class="s2">"CREATE INDEX IF NOT EXISTS idx_history_deals_symbol_time"</span>
|
|
<a id="__codelineno-0-446" name="__codelineno-0-446"></a> <span class="s1">' ON "history_deals"("symbol", "time")'</span><span class="p">,</span>
|
|
<a id="__codelineno-0-447" name="__codelineno-0-447"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-448" name="__codelineno-0-448"></a>
|
|
<a id="__codelineno-0-449" name="__codelineno-0-449"></a> <span class="n">orders_cols</span> <span class="o">=</span> <span class="n">get_table_columns</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"history_orders"</span><span class="p">)</span>
|
|
<a id="__codelineno-0-450" name="__codelineno-0-450"></a> <span class="k">if</span> <span class="p">{</span><span class="s2">"time_setup"</span><span class="p">,</span> <span class="s2">"symbol"</span><span class="p">}</span><span class="o">.</span><span class="n">issubset</span><span class="p">(</span><span class="n">orders_cols</span><span class="p">):</span>
|
|
<a id="__codelineno-0-451" name="__codelineno-0-451"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-452" name="__codelineno-0-452"></a> <span class="s2">"CREATE INDEX IF NOT EXISTS idx_history_orders_time_setup_symbol"</span>
|
|
<a id="__codelineno-0-453" name="__codelineno-0-453"></a> <span class="s1">' ON "history_orders"("time_setup", "symbol")'</span><span class="p">,</span>
|
|
<a id="__codelineno-0-454" name="__codelineno-0-454"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-455" name="__codelineno-0-455"></a>
|
|
<a id="__codelineno-0-456" name="__codelineno-0-456"></a> <span class="k">if</span> <span class="p">{</span><span class="s2">"run_id"</span><span class="p">,</span> <span class="s2">"login"</span><span class="p">}</span><span class="o">.</span><span class="n">issubset</span><span class="p">(</span><span class="n">get_table_columns</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"account_snapshots"</span><span class="p">)):</span>
|
|
<a id="__codelineno-0-457" name="__codelineno-0-457"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-458" name="__codelineno-0-458"></a> <span class="s2">"CREATE INDEX IF NOT EXISTS idx_account_snapshots_time_login"</span>
|
|
<a id="__codelineno-0-459" name="__codelineno-0-459"></a> <span class="s1">' ON "account_snapshots"("run_id", "login")'</span><span class="p">,</span>
|
|
<a id="__codelineno-0-460" name="__codelineno-0-460"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-461" name="__codelineno-0-461"></a> <span class="k">if</span> <span class="p">{</span><span class="s2">"run_id"</span><span class="p">,</span> <span class="s2">"symbol"</span><span class="p">}</span><span class="o">.</span><span class="n">issubset</span><span class="p">(</span><span class="n">get_table_columns</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"position_snapshots"</span><span class="p">)):</span>
|
|
<a id="__codelineno-0-462" name="__codelineno-0-462"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-463" name="__codelineno-0-463"></a> <span class="s2">"CREATE INDEX IF NOT EXISTS idx_position_snapshots_time_symbol"</span>
|
|
<a id="__codelineno-0-464" name="__codelineno-0-464"></a> <span class="s1">' ON "position_snapshots"("run_id", "symbol")'</span><span class="p">,</span>
|
|
<a id="__codelineno-0-465" name="__codelineno-0-465"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-466" name="__codelineno-0-466"></a> <span class="k">if</span> <span class="p">{</span><span class="s2">"run_id"</span><span class="p">,</span> <span class="s2">"symbol"</span><span class="p">}</span><span class="o">.</span><span class="n">issubset</span><span class="p">(</span><span class="n">get_table_columns</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"order_snapshots"</span><span class="p">)):</span>
|
|
<a id="__codelineno-0-467" name="__codelineno-0-467"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-468" name="__codelineno-0-468"></a> <span class="s2">"CREATE INDEX IF NOT EXISTS idx_order_snapshots_time_symbol"</span>
|
|
<a id="__codelineno-0-469" name="__codelineno-0-469"></a> <span class="s1">' ON "order_snapshots"("run_id", "symbol")'</span><span class="p">,</span>
|
|
<a id="__codelineno-0-470" name="__codelineno-0-470"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-471" name="__codelineno-0-471"></a> <span class="k">if</span> <span class="p">{</span><span class="s2">"observed_at"</span><span class="p">,</span> <span class="s2">"status"</span><span class="p">}</span><span class="o">.</span><span class="n">issubset</span><span class="p">(</span><span class="n">get_table_columns</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"snapshot_runs"</span><span class="p">)):</span>
|
|
<a id="__codelineno-0-472" name="__codelineno-0-472"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-473" name="__codelineno-0-473"></a> <span class="s2">"CREATE INDEX IF NOT EXISTS idx_snapshot_runs_time_status"</span>
|
|
<a id="__codelineno-0-474" name="__codelineno-0-474"></a> <span class="s1">' ON "snapshot_runs"("observed_at", "status")'</span><span class="p">,</span>
|
|
<a id="__codelineno-0-475" name="__codelineno-0-475"></a> <span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="mt5cli.grafana.create_grafana_views" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-function-name">create_grafana_views</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana.create_grafana_views" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">create_grafana_views</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n"><span title="sqlite3.Connection">Connection</span></span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Create all Grafana-facing views idempotently.</p>
|
|
<p>Missing source tables cause the affected view to be skipped with a warning;
|
|
other views are unaffected. Stale views whose source table or required
|
|
columns have disappeared are dropped before rebuild.</p>
|
|
|
|
|
|
<details class="mkdocstrings-source">
|
|
<summary>Source code in <code>mt5cli/grafana.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-398">398</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-399">399</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-400">400</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-401">401</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-402">402</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-403">403</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-404">404</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-405">405</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-406">406</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-407">407</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-408">408</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-409">409</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-410">410</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-411">411</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-412">412</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-413">413</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-414">414</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-415">415</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-416">416</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-417">417</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-418">418</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-419">419</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-398" name="__codelineno-0-398"></a><span class="k">def</span><span class="w"> </span><span class="nf">create_grafana_views</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
<a id="__codelineno-0-399" name="__codelineno-0-399"></a><span class="w"> </span><span class="sd">"""Create all Grafana-facing views idempotently.</span>
|
|
<a id="__codelineno-0-400" name="__codelineno-0-400"></a>
|
|
<a id="__codelineno-0-401" name="__codelineno-0-401"></a><span class="sd"> Missing source tables cause the affected view to be skipped with a warning;</span>
|
|
<a id="__codelineno-0-402" name="__codelineno-0-402"></a><span class="sd"> other views are unaffected. Stale views whose source table or required</span>
|
|
<a id="__codelineno-0-403" name="__codelineno-0-403"></a><span class="sd"> columns have disappeared are dropped before rebuild.</span>
|
|
<a id="__codelineno-0-404" name="__codelineno-0-404"></a><span class="sd"> """</span>
|
|
<a id="__codelineno-0-405" name="__codelineno-0-405"></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">_GRAFANA_VIEW_NAMES</span><span class="p">:</span>
|
|
<a id="__codelineno-0-406" name="__codelineno-0-406"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="sa">f</span><span class="s1">'DROP VIEW IF EXISTS "</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s1">"'</span><span class="p">)</span>
|
|
<a id="__codelineno-0-407" name="__codelineno-0-407"></a> <span class="n">_build_grafana_rates</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-408" name="__codelineno-0-408"></a> <span class="n">_build_grafana_ticks</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-409" name="__codelineno-0-409"></a> <span class="n">_build_grafana_history_deals</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-410" name="__codelineno-0-410"></a> <span class="n">_build_grafana_history_orders</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-411" name="__codelineno-0-411"></a> <span class="n">_build_grafana_trade_deals</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-412" name="__codelineno-0-412"></a> <span class="n">_build_grafana_cash_events</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-413" name="__codelineno-0-413"></a> <span class="n">_build_grafana_realized_pnl</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-414" name="__codelineno-0-414"></a> <span class="n">_build_grafana_symbol_pnl</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-415" name="__codelineno-0-415"></a> <span class="n">_build_grafana_trade_stats</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-416" name="__codelineno-0-416"></a> <span class="n">_build_grafana_account_snapshots</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-417" name="__codelineno-0-417"></a> <span class="n">_build_grafana_position_snapshots</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-418" name="__codelineno-0-418"></a> <span class="n">_build_grafana_order_snapshots</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-419" name="__codelineno-0-419"></a> <span class="n">_build_grafana_terminal_snapshots</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="mt5cli.grafana.create_snapshot_tables" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-function-name">create_snapshot_tables</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana.create_snapshot_tables" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">create_snapshot_tables</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n"><span title="sqlite3.Connection">Connection</span></span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Create snapshot tables idempotently.</p>
|
|
|
|
|
|
<details class="mkdocstrings-source">
|
|
<summary>Source code in <code>mt5cli/grafana.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-137">137</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-138">138</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-139">139</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-140">140</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-137" name="__codelineno-0-137"></a><span class="k">def</span><span class="w"> </span><span class="nf">create_snapshot_tables</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
<a id="__codelineno-0-138" name="__codelineno-0-138"></a><span class="w"> </span><span class="sd">"""Create snapshot tables idempotently."""</span>
|
|
<a id="__codelineno-0-139" name="__codelineno-0-139"></a> <span class="k">for</span> <span class="n">ddl</span> <span class="ow">in</span> <span class="n">_SNAPSHOT_TABLE_DDLS</span><span class="p">:</span>
|
|
<a id="__codelineno-0-140" name="__codelineno-0-140"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">ddl</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="mt5cli.grafana.ensure_grafana_schema" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-function-name">ensure_grafana_schema</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana.ensure_grafana_schema" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">ensure_grafana_schema</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n"><span title="sqlite3.Connection">Connection</span></span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Create snapshot tables, Grafana views, and indexes idempotently.</p>
|
|
|
|
|
|
<details class="mkdocstrings-source">
|
|
<summary>Source code in <code>mt5cli/grafana.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-478">478</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-479">479</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-480">480</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-481">481</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-482">482</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-478" name="__codelineno-0-478"></a><span class="k">def</span><span class="w"> </span><span class="nf">ensure_grafana_schema</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
<a id="__codelineno-0-479" name="__codelineno-0-479"></a><span class="w"> </span><span class="sd">"""Create snapshot tables, Grafana views, and indexes idempotently."""</span>
|
|
<a id="__codelineno-0-480" name="__codelineno-0-480"></a> <span class="n">create_snapshot_tables</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-481" name="__codelineno-0-481"></a> <span class="n">create_grafana_views</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
<a id="__codelineno-0-482" name="__codelineno-0-482"></a> <span class="n">create_grafana_indexes</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="mt5cli.grafana.insert_account_snapshot" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-function-name">insert_account_snapshot</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana.insert_account_snapshot" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">insert_account_snapshot</span><span class="p">(</span>
|
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">conn</span><span class="p">:</span> <span class="n"><span title="sqlite3.Connection">Connection</span></span><span class="p">,</span> <span class="n">run_id</span><span class="p">:</span> <span class="n"><span title="int">int</span></span><span class="p">,</span> <span class="n">row</span><span class="p">:</span> <span class="n"><span title="dict">dict</span></span><span class="p">[</span><span class="n"><span title="str">str</span></span><span class="p">,</span> <span class="n"><span title="object">object</span></span><span class="p">]</span>
|
|
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Append one account state row to account_snapshots.</p>
|
|
|
|
|
|
<details class="mkdocstrings-source">
|
|
<summary>Source code in <code>mt5cli/grafana.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-552">552</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-553">553</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-554">554</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-555">555</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-556">556</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-557">557</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-558">558</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-559">559</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-560">560</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-561">561</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-562">562</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-563">563</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-564">564</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-565">565</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-566">566</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-567">567</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-568">568</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-569">569</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-570">570</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-571">571</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-572">572</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-573">573</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-574">574</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-575">575</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-552" name="__codelineno-0-552"></a><span class="k">def</span><span class="w"> </span><span class="nf">insert_account_snapshot</span><span class="p">(</span>
|
|
<a id="__codelineno-0-553" name="__codelineno-0-553"></a> <span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">,</span>
|
|
<a id="__codelineno-0-554" name="__codelineno-0-554"></a> <span class="n">run_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
|
|
<a id="__codelineno-0-555" name="__codelineno-0-555"></a> <span class="n">row</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">],</span>
|
|
<a id="__codelineno-0-556" name="__codelineno-0-556"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
<a id="__codelineno-0-557" name="__codelineno-0-557"></a><span class="w"> </span><span class="sd">"""Append one account state row to account_snapshots."""</span>
|
|
<a id="__codelineno-0-558" name="__codelineno-0-558"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-559" name="__codelineno-0-559"></a> <span class="s2">"INSERT INTO account_snapshots"</span>
|
|
<a id="__codelineno-0-560" name="__codelineno-0-560"></a> <span class="s2">" (run_id, login, currency, balance, equity,"</span>
|
|
<a id="__codelineno-0-561" name="__codelineno-0-561"></a> <span class="s2">" margin, margin_free, margin_level, profit, leverage)"</span>
|
|
<a id="__codelineno-0-562" name="__codelineno-0-562"></a> <span class="s2">" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"</span><span class="p">,</span>
|
|
<a id="__codelineno-0-563" name="__codelineno-0-563"></a> <span class="p">(</span>
|
|
<a id="__codelineno-0-564" name="__codelineno-0-564"></a> <span class="n">run_id</span><span class="p">,</span>
|
|
<a id="__codelineno-0-565" name="__codelineno-0-565"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"login"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-566" name="__codelineno-0-566"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"currency"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-567" name="__codelineno-0-567"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"balance"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-568" name="__codelineno-0-568"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"equity"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-569" name="__codelineno-0-569"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"margin"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-570" name="__codelineno-0-570"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"margin_free"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-571" name="__codelineno-0-571"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"margin_level"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-572" name="__codelineno-0-572"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"profit"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-573" name="__codelineno-0-573"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"leverage"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-574" name="__codelineno-0-574"></a> <span class="p">),</span>
|
|
<a id="__codelineno-0-575" name="__codelineno-0-575"></a> <span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="mt5cli.grafana.insert_order_snapshots" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-function-name">insert_order_snapshots</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana.insert_order_snapshots" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">insert_order_snapshots</span><span class="p">(</span>
|
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">conn</span><span class="p">:</span> <span class="n"><span title="sqlite3.Connection">Connection</span></span><span class="p">,</span>
|
|
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">run_id</span><span class="p">:</span> <span class="n"><span title="int">int</span></span><span class="p">,</span>
|
|
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> <span class="n">login</span><span class="p">:</span> <span class="n"><span title="int">int</span></span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
|
|
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> <span class="n">rows</span><span class="p">:</span> <span class="n"><span title="list">list</span></span><span class="p">[</span><span class="n"><span title="dict">dict</span></span><span class="p">[</span><span class="n"><span title="str">str</span></span><span class="p">,</span> <span class="n"><span title="object">object</span></span><span class="p">]],</span>
|
|
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Append order rows to order_snapshots; no-op when rows is empty.</p>
|
|
|
|
|
|
<details class="mkdocstrings-source">
|
|
<summary>Source code in <code>mt5cli/grafana.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-613">613</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-614">614</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-615">615</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-616">616</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-617">617</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-618">618</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-619">619</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-620">620</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-621">621</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-622">622</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-623">623</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-624">624</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-625">625</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-626">626</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-627">627</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-628">628</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-629">629</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-630">630</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-631">631</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-632">632</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-633">633</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-634">634</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-635">635</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-636">636</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-637">637</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-638">638</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-639">639</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-640">640</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-641">641</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-642">642</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-643">643</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-644">644</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-613" name="__codelineno-0-613"></a><span class="k">def</span><span class="w"> </span><span class="nf">insert_order_snapshots</span><span class="p">(</span>
|
|
<a id="__codelineno-0-614" name="__codelineno-0-614"></a> <span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">,</span>
|
|
<a id="__codelineno-0-615" name="__codelineno-0-615"></a> <span class="n">run_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
|
|
<a id="__codelineno-0-616" name="__codelineno-0-616"></a> <span class="n">login</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
|
|
<a id="__codelineno-0-617" name="__codelineno-0-617"></a> <span class="n">rows</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]],</span>
|
|
<a id="__codelineno-0-618" name="__codelineno-0-618"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
<a id="__codelineno-0-619" name="__codelineno-0-619"></a><span class="w"> </span><span class="sd">"""Append order rows to order_snapshots; no-op when rows is empty."""</span>
|
|
<a id="__codelineno-0-620" name="__codelineno-0-620"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">rows</span><span class="p">:</span>
|
|
<a id="__codelineno-0-621" name="__codelineno-0-621"></a> <span class="k">return</span>
|
|
<a id="__codelineno-0-622" name="__codelineno-0-622"></a> <span class="n">conn</span><span class="o">.</span><span class="n">executemany</span><span class="p">(</span>
|
|
<a id="__codelineno-0-623" name="__codelineno-0-623"></a> <span class="s2">"INSERT INTO order_snapshots"</span>
|
|
<a id="__codelineno-0-624" name="__codelineno-0-624"></a> <span class="s2">" (run_id, login, ticket, symbol, type, volume_current,"</span>
|
|
<a id="__codelineno-0-625" name="__codelineno-0-625"></a> <span class="s2">" price_open, price_current, state, comment, magic, time_setup)"</span>
|
|
<a id="__codelineno-0-626" name="__codelineno-0-626"></a> <span class="s2">" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"</span><span class="p">,</span>
|
|
<a id="__codelineno-0-627" name="__codelineno-0-627"></a> <span class="p">[</span>
|
|
<a id="__codelineno-0-628" name="__codelineno-0-628"></a> <span class="p">(</span>
|
|
<a id="__codelineno-0-629" name="__codelineno-0-629"></a> <span class="n">run_id</span><span class="p">,</span>
|
|
<a id="__codelineno-0-630" name="__codelineno-0-630"></a> <span class="n">login</span><span class="p">,</span>
|
|
<a id="__codelineno-0-631" name="__codelineno-0-631"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"ticket"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-632" name="__codelineno-0-632"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"symbol"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-633" name="__codelineno-0-633"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"type"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-634" name="__codelineno-0-634"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"volume_current"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-635" name="__codelineno-0-635"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"price_open"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-636" name="__codelineno-0-636"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"price_current"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-637" name="__codelineno-0-637"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"state"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-638" name="__codelineno-0-638"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"comment"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-639" name="__codelineno-0-639"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"magic"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-640" name="__codelineno-0-640"></a> <span class="n">_to_epoch_int</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"time_setup"</span><span class="p">)),</span>
|
|
<a id="__codelineno-0-641" name="__codelineno-0-641"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-642" name="__codelineno-0-642"></a> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">rows</span>
|
|
<a id="__codelineno-0-643" name="__codelineno-0-643"></a> <span class="p">],</span>
|
|
<a id="__codelineno-0-644" name="__codelineno-0-644"></a> <span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="mt5cli.grafana.insert_position_snapshots" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-function-name">insert_position_snapshots</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana.insert_position_snapshots" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">insert_position_snapshots</span><span class="p">(</span>
|
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">conn</span><span class="p">:</span> <span class="n"><span title="sqlite3.Connection">Connection</span></span><span class="p">,</span>
|
|
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">run_id</span><span class="p">:</span> <span class="n"><span title="int">int</span></span><span class="p">,</span>
|
|
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> <span class="n">login</span><span class="p">:</span> <span class="n"><span title="int">int</span></span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
|
|
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> <span class="n">rows</span><span class="p">:</span> <span class="n"><span title="list">list</span></span><span class="p">[</span><span class="n"><span title="dict">dict</span></span><span class="p">[</span><span class="n"><span title="str">str</span></span><span class="p">,</span> <span class="n"><span title="object">object</span></span><span class="p">]],</span>
|
|
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Append position rows to position_snapshots; no-op when rows is empty.</p>
|
|
|
|
|
|
<details class="mkdocstrings-source">
|
|
<summary>Source code in <code>mt5cli/grafana.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-578">578</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-579">579</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-580">580</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-581">581</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-582">582</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-583">583</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-584">584</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-585">585</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-586">586</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-587">587</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-588">588</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-589">589</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-590">590</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-591">591</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-592">592</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-593">593</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-594">594</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-595">595</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-596">596</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-597">597</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-598">598</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-599">599</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-600">600</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-601">601</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-602">602</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-603">603</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-604">604</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-605">605</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-606">606</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-607">607</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-608">608</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-609">609</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-610">610</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-578" name="__codelineno-0-578"></a><span class="k">def</span><span class="w"> </span><span class="nf">insert_position_snapshots</span><span class="p">(</span>
|
|
<a id="__codelineno-0-579" name="__codelineno-0-579"></a> <span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">,</span>
|
|
<a id="__codelineno-0-580" name="__codelineno-0-580"></a> <span class="n">run_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
|
|
<a id="__codelineno-0-581" name="__codelineno-0-581"></a> <span class="n">login</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span><span class="p">,</span>
|
|
<a id="__codelineno-0-582" name="__codelineno-0-582"></a> <span class="n">rows</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">]],</span>
|
|
<a id="__codelineno-0-583" name="__codelineno-0-583"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
<a id="__codelineno-0-584" name="__codelineno-0-584"></a><span class="w"> </span><span class="sd">"""Append position rows to position_snapshots; no-op when rows is empty."""</span>
|
|
<a id="__codelineno-0-585" name="__codelineno-0-585"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">rows</span><span class="p">:</span>
|
|
<a id="__codelineno-0-586" name="__codelineno-0-586"></a> <span class="k">return</span>
|
|
<a id="__codelineno-0-587" name="__codelineno-0-587"></a> <span class="n">conn</span><span class="o">.</span><span class="n">executemany</span><span class="p">(</span>
|
|
<a id="__codelineno-0-588" name="__codelineno-0-588"></a> <span class="s2">"INSERT INTO position_snapshots"</span>
|
|
<a id="__codelineno-0-589" name="__codelineno-0-589"></a> <span class="s2">" (run_id, login, ticket, position_id, symbol, type, volume,"</span>
|
|
<a id="__codelineno-0-590" name="__codelineno-0-590"></a> <span class="s2">" price_open, price_current, profit, swap, comment, magic)"</span>
|
|
<a id="__codelineno-0-591" name="__codelineno-0-591"></a> <span class="s2">" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"</span><span class="p">,</span>
|
|
<a id="__codelineno-0-592" name="__codelineno-0-592"></a> <span class="p">[</span>
|
|
<a id="__codelineno-0-593" name="__codelineno-0-593"></a> <span class="p">(</span>
|
|
<a id="__codelineno-0-594" name="__codelineno-0-594"></a> <span class="n">run_id</span><span class="p">,</span>
|
|
<a id="__codelineno-0-595" name="__codelineno-0-595"></a> <span class="n">login</span><span class="p">,</span>
|
|
<a id="__codelineno-0-596" name="__codelineno-0-596"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"ticket"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-597" name="__codelineno-0-597"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"position_id"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-598" name="__codelineno-0-598"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"symbol"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-599" name="__codelineno-0-599"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"type"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-600" name="__codelineno-0-600"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"volume"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-601" name="__codelineno-0-601"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"price_open"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-602" name="__codelineno-0-602"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"price_current"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-603" name="__codelineno-0-603"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"profit"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-604" name="__codelineno-0-604"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"swap"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-605" name="__codelineno-0-605"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"comment"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-606" name="__codelineno-0-606"></a> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"magic"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-607" name="__codelineno-0-607"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-608" name="__codelineno-0-608"></a> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">rows</span>
|
|
<a id="__codelineno-0-609" name="__codelineno-0-609"></a> <span class="p">],</span>
|
|
<a id="__codelineno-0-610" name="__codelineno-0-610"></a> <span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="mt5cli.grafana.insert_terminal_snapshot" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-function-name">insert_terminal_snapshot</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana.insert_terminal_snapshot" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">insert_terminal_snapshot</span><span class="p">(</span>
|
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">conn</span><span class="p">:</span> <span class="n"><span title="sqlite3.Connection">Connection</span></span><span class="p">,</span> <span class="n">run_id</span><span class="p">:</span> <span class="n"><span title="int">int</span></span><span class="p">,</span> <span class="n">row</span><span class="p">:</span> <span class="n"><span title="dict">dict</span></span><span class="p">[</span><span class="n"><span title="str">str</span></span><span class="p">,</span> <span class="n"><span title="object">object</span></span><span class="p">]</span>
|
|
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Append one terminal state row to terminal_snapshots.</p>
|
|
|
|
|
|
<details class="mkdocstrings-source">
|
|
<summary>Source code in <code>mt5cli/grafana.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-647">647</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-648">648</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-649">649</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-650">650</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-651">651</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-652">652</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-653">653</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-654">654</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-655">655</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-656">656</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-657">657</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-658">658</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-659">659</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-660">660</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-661">661</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-662">662</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-663">663</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-664">664</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-665">665</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-666">666</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-667">667</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-668">668</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-669">669</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-647" name="__codelineno-0-647"></a><span class="k">def</span><span class="w"> </span><span class="nf">insert_terminal_snapshot</span><span class="p">(</span>
|
|
<a id="__codelineno-0-648" name="__codelineno-0-648"></a> <span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">,</span>
|
|
<a id="__codelineno-0-649" name="__codelineno-0-649"></a> <span class="n">run_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
|
|
<a id="__codelineno-0-650" name="__codelineno-0-650"></a> <span class="n">row</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">object</span><span class="p">],</span>
|
|
<a id="__codelineno-0-651" name="__codelineno-0-651"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
<a id="__codelineno-0-652" name="__codelineno-0-652"></a><span class="w"> </span><span class="sd">"""Append one terminal state row to terminal_snapshots."""</span>
|
|
<a id="__codelineno-0-653" name="__codelineno-0-653"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-654" name="__codelineno-0-654"></a> <span class="s2">"INSERT INTO terminal_snapshots"</span>
|
|
<a id="__codelineno-0-655" name="__codelineno-0-655"></a> <span class="s2">" (run_id, name, connected, community_account,"</span>
|
|
<a id="__codelineno-0-656" name="__codelineno-0-656"></a> <span class="s2">" trade_allowed, trade_expert, path, company, language)"</span>
|
|
<a id="__codelineno-0-657" name="__codelineno-0-657"></a> <span class="s2">" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"</span><span class="p">,</span>
|
|
<a id="__codelineno-0-658" name="__codelineno-0-658"></a> <span class="p">(</span>
|
|
<a id="__codelineno-0-659" name="__codelineno-0-659"></a> <span class="n">run_id</span><span class="p">,</span>
|
|
<a id="__codelineno-0-660" name="__codelineno-0-660"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"name"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-661" name="__codelineno-0-661"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"connected"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-662" name="__codelineno-0-662"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"community_account"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-663" name="__codelineno-0-663"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"trade_allowed"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-664" name="__codelineno-0-664"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"trade_expert"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-665" name="__codelineno-0-665"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"path"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-666" name="__codelineno-0-666"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"company"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-667" name="__codelineno-0-667"></a> <span class="n">row</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"language"</span><span class="p">),</span>
|
|
<a id="__codelineno-0-668" name="__codelineno-0-668"></a> <span class="p">),</span>
|
|
<a id="__codelineno-0-669" name="__codelineno-0-669"></a> <span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="mt5cli.grafana.publish_grafana_copy" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-function-name">publish_grafana_copy</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana.publish_grafana_copy" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">publish_grafana_copy</span><span class="p">(</span>
|
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">source</span><span class="p">:</span> <span class="n"><span title="str">str</span></span> <span class="o">|</span> <span class="n"><span title="pathlib.Path">Path</span></span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n"><span title="str">str</span></span> <span class="o">|</span> <span class="n"><span title="pathlib.Path">Path</span></span>
|
|
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="p">)</span> <span class="o">-></span> <span class="n"><span title="pathlib.Path">Path</span></span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Publish a consistent SQLite copy for Grafana using the backup API.</p>
|
|
<p>Uses the SQLite online backup API for a WAL-safe, consistent snapshot of
|
|
the source database. Writes to a temporary file beside the target, then
|
|
atomically replaces it so that a previous published copy is preserved if
|
|
publishing fails.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
<code>source</code>
|
|
</td>
|
|
<td>
|
|
<code><span title="str">str</span> | <span title="pathlib.Path">Path</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Path to the source SQLite database.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
<code>target</code>
|
|
</td>
|
|
<td>
|
|
<code><span title="str">str</span> | <span title="pathlib.Path">Path</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Destination path for the published copy.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
<code><span title="pathlib.Path">Path</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The resolved absolute target path.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Raises:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
<code><span title="FileNotFoundError">FileNotFoundError</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>If the source database does not exist.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
<code><span title="ValueError">ValueError</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>If source and target resolve to the same path.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<details class="mkdocstrings-source">
|
|
<summary>Source code in <code>mt5cli/grafana.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-485">485</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-486">486</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-487">487</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-488">488</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-489">489</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-490">490</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-491">491</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-492">492</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-493">493</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-494">494</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-495">495</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-496">496</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-497">497</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-498">498</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-499">499</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-500">500</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-501">501</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-502">502</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-503">503</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-504">504</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-505">505</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-506">506</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-507">507</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-508">508</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-509">509</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-510">510</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-511">511</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-512">512</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-513">513</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-514">514</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-515">515</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-516">516</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-517">517</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-518">518</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-519">519</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-520">520</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-521">521</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-522">522</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-523">523</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-524">524</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-525">525</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-526">526</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-527">527</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-528">528</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-529">529</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-530">530</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-531">531</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-532">532</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-533">533</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-534">534</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-535">535</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-536">536</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-537">537</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-538">538</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-539">539</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-540">540</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-541">541</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-542">542</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-543">543</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-544">544</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-485" name="__codelineno-0-485"></a><span class="k">def</span><span class="w"> </span><span class="nf">publish_grafana_copy</span><span class="p">(</span>
|
|
<a id="__codelineno-0-486" name="__codelineno-0-486"></a> <span class="n">source</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Path</span><span class="p">,</span>
|
|
<a id="__codelineno-0-487" name="__codelineno-0-487"></a> <span class="n">target</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Path</span><span class="p">,</span>
|
|
<a id="__codelineno-0-488" name="__codelineno-0-488"></a><span class="p">)</span> <span class="o">-></span> <span class="n">Path</span><span class="p">:</span>
|
|
<a id="__codelineno-0-489" name="__codelineno-0-489"></a><span class="w"> </span><span class="sd">"""Publish a consistent SQLite copy for Grafana using the backup API.</span>
|
|
<a id="__codelineno-0-490" name="__codelineno-0-490"></a>
|
|
<a id="__codelineno-0-491" name="__codelineno-0-491"></a><span class="sd"> Uses the SQLite online backup API for a WAL-safe, consistent snapshot of</span>
|
|
<a id="__codelineno-0-492" name="__codelineno-0-492"></a><span class="sd"> the source database. Writes to a temporary file beside the target, then</span>
|
|
<a id="__codelineno-0-493" name="__codelineno-0-493"></a><span class="sd"> atomically replaces it so that a previous published copy is preserved if</span>
|
|
<a id="__codelineno-0-494" name="__codelineno-0-494"></a><span class="sd"> publishing fails.</span>
|
|
<a id="__codelineno-0-495" name="__codelineno-0-495"></a>
|
|
<a id="__codelineno-0-496" name="__codelineno-0-496"></a><span class="sd"> Args:</span>
|
|
<a id="__codelineno-0-497" name="__codelineno-0-497"></a><span class="sd"> source: Path to the source SQLite database.</span>
|
|
<a id="__codelineno-0-498" name="__codelineno-0-498"></a><span class="sd"> target: Destination path for the published copy.</span>
|
|
<a id="__codelineno-0-499" name="__codelineno-0-499"></a>
|
|
<a id="__codelineno-0-500" name="__codelineno-0-500"></a><span class="sd"> Returns:</span>
|
|
<a id="__codelineno-0-501" name="__codelineno-0-501"></a><span class="sd"> The resolved absolute target path.</span>
|
|
<a id="__codelineno-0-502" name="__codelineno-0-502"></a>
|
|
<a id="__codelineno-0-503" name="__codelineno-0-503"></a><span class="sd"> Raises:</span>
|
|
<a id="__codelineno-0-504" name="__codelineno-0-504"></a><span class="sd"> FileNotFoundError: If the source database does not exist.</span>
|
|
<a id="__codelineno-0-505" name="__codelineno-0-505"></a><span class="sd"> ValueError: If source and target resolve to the same path.</span>
|
|
<a id="__codelineno-0-506" name="__codelineno-0-506"></a><span class="sd"> """</span>
|
|
<a id="__codelineno-0-507" name="__codelineno-0-507"></a> <span class="n">source_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
|
|
<a id="__codelineno-0-508" name="__codelineno-0-508"></a> <span class="n">target_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
|
|
<a id="__codelineno-0-509" name="__codelineno-0-509"></a> <span class="k">if</span> <span class="n">source_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span> <span class="o">==</span> <span class="n">target_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">():</span>
|
|
<a id="__codelineno-0-510" name="__codelineno-0-510"></a> <span class="n">msg</span> <span class="o">=</span> <span class="s2">"--publish-copy target must differ from the source database: "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span>
|
|
<a id="__codelineno-0-511" name="__codelineno-0-511"></a> <span class="n">source_path</span>
|
|
<a id="__codelineno-0-512" name="__codelineno-0-512"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-513" name="__codelineno-0-513"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
|
|
<a id="__codelineno-0-514" name="__codelineno-0-514"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">source_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
<a id="__codelineno-0-515" name="__codelineno-0-515"></a> <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="n">source_path</span><span class="p">)</span>
|
|
<a id="__codelineno-0-516" name="__codelineno-0-516"></a>
|
|
<a id="__codelineno-0-517" name="__codelineno-0-517"></a> <span class="n">target_path</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<a id="__codelineno-0-518" name="__codelineno-0-518"></a>
|
|
<a id="__codelineno-0-519" name="__codelineno-0-519"></a> <span class="n">tmp_fd</span><span class="p">,</span> <span class="n">tmp_str</span> <span class="o">=</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">mkstemp</span><span class="p">(</span>
|
|
<a id="__codelineno-0-520" name="__codelineno-0-520"></a> <span class="nb">dir</span><span class="o">=</span><span class="n">target_path</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span>
|
|
<a id="__codelineno-0-521" name="__codelineno-0-521"></a> <span class="n">suffix</span><span class="o">=</span><span class="s2">".tmp"</span><span class="p">,</span>
|
|
<a id="__codelineno-0-522" name="__codelineno-0-522"></a> <span class="n">prefix</span><span class="o">=</span><span class="n">target_path</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">"."</span><span class="p">,</span>
|
|
<a id="__codelineno-0-523" name="__codelineno-0-523"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-524" name="__codelineno-0-524"></a> <span class="n">tmp_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">tmp_str</span><span class="p">)</span>
|
|
<a id="__codelineno-0-525" name="__codelineno-0-525"></a> <span class="k">try</span><span class="p">:</span>
|
|
<a id="__codelineno-0-526" name="__codelineno-0-526"></a> <span class="n">os</span><span class="o">.</span><span class="n">close</span><span class="p">(</span><span class="n">tmp_fd</span><span class="p">)</span>
|
|
<a id="__codelineno-0-527" name="__codelineno-0-527"></a> <span class="k">with</span> <span class="p">(</span>
|
|
<a id="__codelineno-0-528" name="__codelineno-0-528"></a> <span class="n">contextlib</span><span class="o">.</span><span class="n">closing</span><span class="p">(</span><span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">source_path</span><span class="p">))</span> <span class="k">as</span> <span class="n">src</span><span class="p">,</span>
|
|
<a id="__codelineno-0-529" name="__codelineno-0-529"></a> <span class="n">contextlib</span><span class="o">.</span><span class="n">closing</span><span class="p">(</span><span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">tmp_path</span><span class="p">))</span> <span class="k">as</span> <span class="n">dst</span><span class="p">,</span>
|
|
<a id="__codelineno-0-530" name="__codelineno-0-530"></a> <span class="p">):</span>
|
|
<a id="__codelineno-0-531" name="__codelineno-0-531"></a> <span class="n">src</span><span class="o">.</span><span class="n">backup</span><span class="p">(</span><span class="n">dst</span><span class="p">)</span>
|
|
<a id="__codelineno-0-532" name="__codelineno-0-532"></a> <span class="k">try</span><span class="p">:</span>
|
|
<a id="__codelineno-0-533" name="__codelineno-0-533"></a> <span class="n">target_mode</span> <span class="o">=</span> <span class="n">target_path</span><span class="o">.</span><span class="n">stat</span><span class="p">()</span><span class="o">.</span><span class="n">st_mode</span> <span class="o">&</span> <span class="mo">0o777</span>
|
|
<a id="__codelineno-0-534" name="__codelineno-0-534"></a> <span class="k">except</span> <span class="ne">FileNotFoundError</span><span class="p">:</span>
|
|
<a id="__codelineno-0-535" name="__codelineno-0-535"></a> <span class="n">target_mode</span> <span class="o">=</span> <span class="mo">0o644</span>
|
|
<a id="__codelineno-0-536" name="__codelineno-0-536"></a> <span class="n">Path</span><span class="p">(</span><span class="n">tmp_path</span><span class="p">)</span><span class="o">.</span><span class="n">chmod</span><span class="p">(</span><span class="n">target_mode</span><span class="p">)</span>
|
|
<a id="__codelineno-0-537" name="__codelineno-0-537"></a> <span class="n">tmp_path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">target_path</span><span class="p">)</span>
|
|
<a id="__codelineno-0-538" name="__codelineno-0-538"></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<a id="__codelineno-0-539" name="__codelineno-0-539"></a> <span class="k">with</span> <span class="n">contextlib</span><span class="o">.</span><span class="n">suppress</span><span class="p">(</span><span class="ne">OSError</span><span class="p">):</span>
|
|
<a id="__codelineno-0-540" name="__codelineno-0-540"></a> <span class="n">tmp_path</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
|
|
<a id="__codelineno-0-541" name="__codelineno-0-541"></a> <span class="k">raise</span>
|
|
<a id="__codelineno-0-542" name="__codelineno-0-542"></a>
|
|
<a id="__codelineno-0-543" name="__codelineno-0-543"></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Published Grafana copy: </span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">source_path</span><span class="p">,</span> <span class="n">target_path</span><span class="p">)</span>
|
|
<a id="__codelineno-0-544" name="__codelineno-0-544"></a> <span class="k">return</span> <span class="n">target_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="mt5cli.grafana.record_snapshot_run" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-function-name">record_snapshot_run</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana.record_snapshot_run" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">record_snapshot_run</span><span class="p">(</span>
|
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">conn</span><span class="p">:</span> <span class="n"><span title="sqlite3.Connection">Connection</span></span><span class="p">,</span>
|
|
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a> <span class="n">run_id</span><span class="p">:</span> <span class="n"><span title="int">int</span></span><span class="p">,</span>
|
|
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a> <span class="n">status</span><span class="p">:</span> <span class="n"><span title="str">str</span></span><span class="p">,</span>
|
|
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a> <span class="n">detail</span><span class="p">:</span> <span class="n"><span title="str">str</span></span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
|
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Finalize a snapshot run by setting its status.</p>
|
|
|
|
|
|
<details class="mkdocstrings-source">
|
|
<summary>Source code in <code>mt5cli/grafana.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-672">672</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-673">673</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-674">674</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-675">675</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-676">676</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-677">677</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-678">678</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-679">679</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-680">680</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-681">681</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-682">682</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-672" name="__codelineno-0-672"></a><span class="k">def</span><span class="w"> </span><span class="nf">record_snapshot_run</span><span class="p">(</span>
|
|
<a id="__codelineno-0-673" name="__codelineno-0-673"></a> <span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">,</span>
|
|
<a id="__codelineno-0-674" name="__codelineno-0-674"></a> <span class="n">run_id</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
|
|
<a id="__codelineno-0-675" name="__codelineno-0-675"></a> <span class="n">status</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
|
|
<a id="__codelineno-0-676" name="__codelineno-0-676"></a> <span class="n">detail</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
|
|
<a id="__codelineno-0-677" name="__codelineno-0-677"></a><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
<a id="__codelineno-0-678" name="__codelineno-0-678"></a><span class="w"> </span><span class="sd">"""Finalize a snapshot run by setting its status."""</span>
|
|
<a id="__codelineno-0-679" name="__codelineno-0-679"></a> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-680" name="__codelineno-0-680"></a> <span class="s2">"UPDATE snapshot_runs SET status = ?, detail = ? WHERE run_id = ?"</span><span class="p">,</span>
|
|
<a id="__codelineno-0-681" name="__codelineno-0-681"></a> <span class="p">(</span><span class="n">status</span><span class="p">,</span> <span class="n">detail</span><span class="p">,</span> <span class="n">run_id</span><span class="p">),</span>
|
|
<a id="__codelineno-0-682" name="__codelineno-0-682"></a> <span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="mt5cli.grafana.start_snapshot_run" class="doc doc-heading">
|
|
<span class="doc doc-object-name doc-function-name">start_snapshot_run</span>
|
|
|
|
|
|
<a href="#mt5cli.grafana.start_snapshot_run" class="headerlink" title="Permanent link">¶</a></h3>
|
|
<div class="doc-signature highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nf">start_snapshot_run</span><span class="p">(</span>
|
|
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a> <span class="n">conn</span><span class="p">:</span> <span class="n"><span title="sqlite3.Connection">Connection</span></span><span class="p">,</span> <span class="n">observed_at</span><span class="p">:</span> <span class="n"><span title="int">int</span></span>
|
|
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="p">)</span> <span class="o">-></span> <span class="n"><span title="int">int</span></span>
|
|
</code></pre></div>
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Insert a snapshot_runs row with status 'running' and return its run_id.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
<code><span title="int">int</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The auto-assigned run_id for the new row.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<details class="mkdocstrings-source">
|
|
<summary>Source code in <code>mt5cli/grafana.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-143">143</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-144">144</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-145">145</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-146">146</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-147">147</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-148">148</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-149">149</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-150">150</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-151">151</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-152">152</a></span>
|
|
<span class="normal"><a href="#__codelineno-0-153">153</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-143" name="__codelineno-0-143"></a><span class="k">def</span><span class="w"> </span><span class="nf">start_snapshot_run</span><span class="p">(</span><span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">,</span> <span class="n">observed_at</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-></span> <span class="nb">int</span><span class="p">:</span>
|
|
<a id="__codelineno-0-144" name="__codelineno-0-144"></a><span class="w"> </span><span class="sd">"""Insert a snapshot_runs row with status 'running' and return its run_id.</span>
|
|
<a id="__codelineno-0-145" name="__codelineno-0-145"></a>
|
|
<a id="__codelineno-0-146" name="__codelineno-0-146"></a><span class="sd"> Returns:</span>
|
|
<a id="__codelineno-0-147" name="__codelineno-0-147"></a><span class="sd"> The auto-assigned run_id for the new row.</span>
|
|
<a id="__codelineno-0-148" name="__codelineno-0-148"></a><span class="sd"> """</span>
|
|
<a id="__codelineno-0-149" name="__codelineno-0-149"></a> <span class="n">cursor</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
|
|
<a id="__codelineno-0-150" name="__codelineno-0-150"></a> <span class="s2">"INSERT INTO snapshot_runs (observed_at, status) VALUES (?, 'running')"</span><span class="p">,</span>
|
|
<a id="__codelineno-0-151" name="__codelineno-0-151"></a> <span class="p">(</span><span class="n">observed_at</span><span class="p">,),</span>
|
|
<a id="__codelineno-0-152" name="__codelineno-0-152"></a> <span class="p">)</span>
|
|
<a id="__codelineno-0-153" name="__codelineno-0-153"></a> <span class="k">return</span> <span class="n">cast</span><span class="p">(</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">cursor</span><span class="o">.</span><span class="n">lastrowid</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div><h2 id="grafana-ready-sqlite-workflow">Grafana-ready SQLite workflow<a class="headerlink" href="#grafana-ready-sqlite-workflow" title="Permanent link">¶</a></h2>
|
|
<p>Use <code>ensure_grafana_schema(conn)</code> or the <code>grafana-schema</code> CLI command to create
|
|
the snapshot tables, <code>grafana_*</code> views, and supporting indexes in one step.</p>
|
|
<p><code>publish_grafana_copy(source, target)</code> creates a consistent SQLite copy via the
|
|
SQLite backup API, which is useful when the primary database is running in WAL
|
|
mode and Grafana should read from a separate published file.</p>
|
|
<h2 id="main-apis">Main APIs<a class="headerlink" href="#main-apis" title="Permanent link">¶</a></h2>
|
|
<ul>
|
|
<li><code>ensure_grafana_schema()</code>: idempotently creates snapshot tables, Grafana
|
|
views, and indexes.</li>
|
|
<li><code>create_grafana_views()</code>: rebuilds the shipped <code>grafana_*</code> views.</li>
|
|
<li><code>create_grafana_indexes()</code>: creates read-oriented indexes for Grafana
|
|
queries.</li>
|
|
<li><code>publish_grafana_copy()</code>: writes an atomic, WAL-safe published copy for a
|
|
Grafana datasource.</li>
|
|
</ul>
|
|
<p>For end-to-end snapshot collection examples, see the Grafana and observability
|
|
section in the project <code>README.md</code>.</p></div>
|
|
</div>
|
|
</div>
|
|
|
|
<footer class="col-md-12">
|
|
<hr>
|
|
<p>Documentation built with <a href="https://www.mkdocs.org/">MkDocs</a>.</p>
|
|
</footer>
|
|
<script src="../../js/bootstrap.bundle.min.js"></script>
|
|
<script>
|
|
var base_url = "../..",
|
|
shortcuts = {"help": 191, "next": 78, "previous": 80, "search": 83};
|
|
</script>
|
|
<script src="../../js/base.js"></script>
|
|
<script src="../../search/main.js"></script>
|
|
|
|
<div class="modal" id="mkdocs_search_modal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true">
|
|
<div class="modal-dialog modal-lg">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h4 class="modal-title" id="searchModalLabel">Search</h4>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<p>From here you can search these documents. Enter your search terms below.</p>
|
|
<form>
|
|
<div class="form-group">
|
|
<input type="search" class="form-control" placeholder="Search..." id="mkdocs-search-query" title="Type search term here">
|
|
</div>
|
|
</form>
|
|
<div id="mkdocs-search-results" data-no-results-text="No results found"></div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div><div class="modal" id="mkdocs_keyboard_modal" tabindex="-1" role="dialog" aria-labelledby="keyboardModalLabel" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h4 class="modal-title" id="keyboardModalLabel">Keyboard Shortcuts</h4>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th style="width: 20%;">Keys</th>
|
|
<th>Action</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="help shortcut"><kbd>?</kbd></td>
|
|
<td>Open this help</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="next shortcut"><kbd>n</kbd></td>
|
|
<td>Next page</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="prev shortcut"><kbd>p</kbd></td>
|
|
<td>Previous page</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="search shortcut"><kbd>s</kbd></td>
|
|
<td>Search</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="modal-footer">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</body>
|
|
</html>
|