analytics/Plausible.DataMigration.RewriteFunnelDupes.html
2023-11-17 17:43:12 +00:00

469 lines
14 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<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="generator" content="ExDoc v0.30.3">
<meta name="project" content="Plausible v0.0.1">
<title>Plausible.DataMigration.RewriteFunnelDupes — Plausible v0.0.1</title>
<link rel="stylesheet" href="dist/html-elixir-P5GXSCHE.css" />
<script src="dist/handlebars.runtime-NWIB6V2M.js"></script>
<script src="dist/handlebars.templates-NBND3S2D.js"></script>
<script src="dist/sidebar_items-6A957D75.js"></script>
<script src="docs_config.js"></script>
<script async src="dist/html-CGDDOCMI.js"></script>
</head>
<body data-type="modules" class="page-module">
<script>
try {
var settings = JSON.parse(localStorage.getItem('ex_doc:settings') || '{}');
if (settings.theme === 'dark' ||
((settings.theme === 'system' || settings.theme == null) &&
window.matchMedia('(prefers-color-scheme: dark)').matches)
) {
document.body.classList.add('dark')
}
} catch (error) { }
</script>
<div class="main">
<button class="sidebar-button sidebar-toggle" aria-label="toggle sidebar">
<i class="ri-menu-line ri-lg" title="Collapse/expand sidebar"></i>
</button>
<section class="sidebar">
<form class="sidebar-search" action="search.html">
<button type="submit" class="search-button" aria-label="Submit Search">
<i class="ri-search-2-line" aria-hidden="true" title="Submit search"></i>
</button>
<button type="button" tabindex="-1" class="search-close-button" aria-label="Cancel Search">
<i class="ri-close-line ri-lg" aria-hidden="true" title="Cancel search"></i>
</button>
<label class="search-label">
<p class="sr-only">Search</p>
<input name="q" type="text" class="search-input" placeholder="Search..." aria-label="Input your search terms" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
</label>
</form>
<div class="autocomplete">
<div class="autocomplete-results">
</div>
</div>
<div class="sidebar-header">
<a href="readme.html">
<img src="assets/logo.png" alt="Plausible" class="sidebar-projectImage">
</a>
<div class="sidebar-projectDetails">
<a href="readme.html" class="sidebar-projectName" translate="no">
Plausible
</a>
<div class="sidebar-projectVersion" translate="no">
v0.0.1
</div>
</div>
<ul class="sidebar-listNav">
<li><a id="extras-list-link" href="#full-list">Pages</a></li>
<li><a id="modules-list-link" href="#full-list">Modules</a></li>
<li><a id="tasks-list-link" href="#full-list"><span translate="no">Mix</span> Tasks</a></li>
</ul>
</div>
<div class="gradient"></div>
<ul id="full-list"></ul>
</section>
<section class="content">
<output role="status" id="toast"></output>
<div class="content-outer">
<div id="content" class="content-inner">
<h1>
<button class="icon-action display-settings">
<i class="ri-settings-3-line"></i>
<span class="sr-only">Settings</span>
</button>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/data_migration/rewrite_funnel_dupes.ex#L1" title="View Source" class="icon-action" rel="help">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
<span class="sr-only">View Source</span>
</a>
<span translate="no">Plausible.DataMigration.RewriteFunnelDupes</span>
<small class="app-vsn" translate="no">(Plausible v0.0.1)</small>
</h1>
<section id="moduledoc">
<p>A data fix migration that seeks funnels having steps
whose goals are equally named.
It then tries to rewrite the duplicate goals using the
oldest goal available. In extreme cases, e.g. when multiple
duplicates are found for a single funnel, it will either
reduce or completely remove the funnel.
This enables us to run a migration later on that will
delete duplicate goals and enforce goal uniqueness at the
database level via a CHECK constraint.</p><p>To run, just call the <code class="inline">run</code> function.</p>
</section>
<section id="summary" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#summary">
<i class="ri-link-m" aria-hidden="true"></i>
Summary
</a>
</h1>
<div class="summary-functions summary">
<h2>
<a href="#functions">Functions</a>
</h2>
<div class="summary-row">
<div class="summary-signature">
<a href="#apply_change/2" translate="no">apply_change(funnel_id, change)</a>
</div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#confirm/3" translate="no">confirm(message, func, default_choice \\ :yes)</a>
</div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#execute/1" translate="no">execute(data)</a>
</div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#run/1" translate="no">run(_ \\ [])</a>
</div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#run_sql/2" translate="no">run_sql(name, assigns \\ [])</a>
</div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#run_sql_confirm/2" translate="no">run_sql_confirm(name, options \\ [])</a>
</div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#to_db_ops/1" translate="no">to_db_ops(meta)</a>
</div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#to_map/1" translate="no">to_map(row)</a>
</div>
</div>
<div class="summary-row">
<div class="summary-signature">
<a href="#translate_to_db_ops/1" translate="no">translate_to_db_ops(data)</a>
</div>
</div>
</div>
</section>
<section id="functions" class="details-list">
<h1 class="section-heading">
<a class="hover-link" href="#functions">
<i class="ri-link-m" aria-hidden="true"></i>
Functions
</a>
</h1>
<div class="functions-list">
<section class="detail" id="apply_change/2">
<div class="detail-header">
<a href="#apply_change/2" class="detail-link" title="Link to this function">
<i class="ri-link-m" aria-hidden="true"></i>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature" translate="no">apply_change(funnel_id, change)</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/data_migration/rewrite_funnel_dupes.ex#L75" class="icon-action" rel="help" title="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
</section>
</section>
<section class="detail" id="confirm/3">
<span id="confirm/2"></span>
<div class="detail-header">
<a href="#confirm/3" class="detail-link" title="Link to this function">
<i class="ri-link-m" aria-hidden="true"></i>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature" translate="no">confirm(message, func, default_choice \\ :yes)</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/data_migration/rewrite_funnel_dupes.ex#L15" class="icon-action" rel="help" title="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
</section>
</section>
<section class="detail" id="execute/1">
<div class="detail-header">
<a href="#execute/1" class="detail-link" title="Link to this function">
<i class="ri-link-m" aria-hidden="true"></i>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature" translate="no">execute(data)</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/data_migration/rewrite_funnel_dupes.ex#L55" class="icon-action" rel="help" title="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
</section>
</section>
<section class="detail" id="run/1">
<span id="run/0"></span>
<div class="detail-header">
<a href="#run/1" class="detail-link" title="Link to this function">
<i class="ri-link-m" aria-hidden="true"></i>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature" translate="no">run(_ \\ [])</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/data_migration/rewrite_funnel_dupes.ex#L18" class="icon-action" rel="help" title="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
</section>
</section>
<section class="detail" id="run_sql/2">
<span id="run_sql/1"></span>
<div class="detail-header">
<a href="#run_sql/2" class="detail-link" title="Link to this function">
<i class="ri-link-m" aria-hidden="true"></i>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature" translate="no">run_sql(name, assigns \\ [])</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/data_migration/rewrite_funnel_dupes.ex#L15" class="icon-action" rel="help" title="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
</section>
</section>
<section class="detail" id="run_sql_confirm/2">
<span id="run_sql_confirm/1"></span>
<div class="detail-header">
<a href="#run_sql_confirm/2" class="detail-link" title="Link to this function">
<i class="ri-link-m" aria-hidden="true"></i>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature" translate="no">run_sql_confirm(name, options \\ [])</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/data_migration/rewrite_funnel_dupes.ex#L15" class="icon-action" rel="help" title="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
</section>
</section>
<section class="detail" id="to_db_ops/1">
<div class="detail-header">
<a href="#to_db_ops/1" class="detail-link" title="Link to this function">
<i class="ri-link-m" aria-hidden="true"></i>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature" translate="no">to_db_ops(meta)</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/data_migration/rewrite_funnel_dupes.ex#L134" class="icon-action" rel="help" title="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
</section>
</section>
<section class="detail" id="to_map/1">
<div class="detail-header">
<a href="#to_map/1" class="detail-link" title="Link to this function">
<i class="ri-link-m" aria-hidden="true"></i>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature" translate="no">to_map(row)</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/data_migration/rewrite_funnel_dupes.ex#L166" class="icon-action" rel="help" title="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
</section>
</section>
<section class="detail" id="translate_to_db_ops/1">
<div class="detail-header">
<a href="#translate_to_db_ops/1" class="detail-link" title="Link to this function">
<i class="ri-link-m" aria-hidden="true"></i>
<span class="sr-only">Link to this function</span>
</a>
<h1 class="signature" translate="no">translate_to_db_ops(data)</h1>
<a href="https://github.com/plausible/analytics/blob/main/lib/plausible/data_migration/rewrite_funnel_dupes.ex#L128" class="icon-action" rel="help" title="View Source">
<i class="ri-code-s-slash-line" aria-hidden="true"></i>
<span class="sr-only">View Source</span>
</a>
</div>
<section class="docstring">
</section>
</section>
</div>
</section>
<footer class="footer">
<p>
<span class="line">
<button class="a-main footer-button display-quick-switch" title="Search HexDocs packages">
Search HexDocs
</button>
<a href="Plausible.epub" title="ePub version">
Download ePub version
</a>
</span>
</p>
<p class="built-using">
Built using
<a href="https://github.com/elixir-lang/ex_doc" title="ExDoc" target="_blank" rel="help noopener" translate="no">ExDoc</a> (v0.30.3) for the
<a href="https://elixir-lang.org" title="Elixir" target="_blank" translate="no">Elixir programming language</a>
</p>
</footer>
</div>
</div>
</section>
</div>
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
<script>mermaid.initialize({startOnLoad: true})</script>
</body>
</html>