-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
66ce2f0
commit 839307b
Showing
21 changed files
with
4,364 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
afd1c3ae |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,287 @@ | ||
<!DOCTYPE html> | ||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> | ||
|
||
<meta charset="utf-8"> | ||
<meta name="generator" content="quarto-1.2.280"> | ||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> | ||
|
||
|
||
<title>LogAnalyzer – readme</title> | ||
<style> | ||
code{white-space: pre-wrap;} | ||
span.smallcaps{font-variant: small-caps;} | ||
div.columns{display: flex; gap: min(4vw, 1.5em);} | ||
div.column{flex: auto; overflow-x: auto;} | ||
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} | ||
ul.task-list{list-style: none;} | ||
ul.task-list li input[type="checkbox"] { | ||
width: 0.8em; | ||
margin: 0 0.8em 0.2em -1.6em; | ||
vertical-align: middle; | ||
} | ||
</style> | ||
|
||
|
||
<script src="site_libs/quarto-nav/quarto-nav.js"></script> | ||
<script src="site_libs/quarto-nav/headroom.min.js"></script> | ||
<script src="site_libs/clipboard/clipboard.min.js"></script> | ||
<script src="site_libs/quarto-search/autocomplete.umd.js"></script> | ||
<script src="site_libs/quarto-search/fuse.min.js"></script> | ||
<script src="site_libs/quarto-search/quarto-search.js"></script> | ||
<meta name="quarto:offset" content="./"> | ||
<script src="site_libs/quarto-html/quarto.js"></script> | ||
<script src="site_libs/quarto-html/popper.min.js"></script> | ||
<script src="site_libs/quarto-html/tippy.umd.min.js"></script> | ||
<script src="site_libs/quarto-html/anchor.min.js"></script> | ||
<link href="site_libs/quarto-html/tippy.css" rel="stylesheet"> | ||
<link href="site_libs/quarto-html/quarto-syntax-highlighting.css" rel="stylesheet" id="quarto-text-highlighting-styles"> | ||
<script src="site_libs/bootstrap/bootstrap.min.js"></script> | ||
<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> | ||
<link href="site_libs/bootstrap/bootstrap.min.css" rel="stylesheet" id="quarto-bootstrap" data-mode="light"> | ||
<script id="quarto-search-options" type="application/json">{ | ||
"location": "navbar", | ||
"copy-button": false, | ||
"collapse-after": 3, | ||
"panel-placement": "end", | ||
"type": "overlay", | ||
"limit": 20, | ||
"language": { | ||
"search-no-results-text": "No results", | ||
"search-matching-documents-text": "matching documents", | ||
"search-copy-link-title": "Copy link to search", | ||
"search-hide-matches-text": "Hide additional matches", | ||
"search-more-match-text": "more match in this document", | ||
"search-more-matches-text": "more matches in this document", | ||
"search-clear-button-title": "Clear", | ||
"search-detached-cancel-button-title": "Cancel", | ||
"search-submit-button-title": "Submit" | ||
} | ||
}</script> | ||
|
||
|
||
<link rel="stylesheet" href="styles.css"> | ||
</head> | ||
|
||
<body class="nav-fixed"> | ||
|
||
<div id="quarto-search-results"></div> | ||
<header id="quarto-header" class="headroom fixed-top"> | ||
<nav class="navbar navbar-expand-lg navbar-dark "> | ||
<div class="navbar-container container-fluid"> | ||
<div class="navbar-brand-container"> | ||
<a class="navbar-brand" href="./index.html"> | ||
<span class="navbar-title">LogAnalyzer</span> | ||
</a> | ||
</div> | ||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> | ||
<span class="navbar-toggler-icon"></span> | ||
</button> | ||
<div class="collapse navbar-collapse" id="navbarCollapse"> | ||
<ul class="navbar-nav navbar-nav-scroll me-auto"> | ||
<li class="nav-item"> | ||
<a class="nav-link active" href="./README.html" aria-current="page"> | ||
<span class="menu-text">Home</span></a> | ||
</li> | ||
</ul> | ||
<div id="quarto-search" class="" title="Search"></div> | ||
</div> <!-- /navcollapse --> | ||
</div> <!-- /container-fluid --> | ||
</nav> | ||
</header> | ||
<!-- content --> | ||
<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar"> | ||
<!-- sidebar --> | ||
<!-- margin-sidebar --> | ||
<div id="quarto-margin-sidebar" class="sidebar margin-sidebar"> | ||
<nav id="TOC" role="doc-toc" class="toc-active"> | ||
<h2 id="toc-title">On this page</h2> | ||
|
||
<ul> | ||
<li><a href="#loganalyzer" id="toc-loganalyzer" class="nav-link active" data-scroll-target="#loganalyzer">LogAnalyzer</a></li> | ||
<li><a href="#how-it-works" id="toc-how-it-works" class="nav-link" data-scroll-target="#how-it-works">How it works?</a></li> | ||
<li><a href="#credits" id="toc-credits" class="nav-link" data-scroll-target="#credits">Credits</a> | ||
<ul class="collapse"> | ||
<li><a href="#appsilon" id="toc-appsilon" class="nav-link" data-scroll-target="#appsilon">Appsilon</a></li> | ||
</ul></li> | ||
</ul> | ||
</nav> | ||
</div> | ||
<!-- main --> | ||
<main class="content" id="quarto-document-content"> | ||
|
||
|
||
|
||
<section id="loganalyzer" class="level1"> | ||
<h1>LogAnalyzer</h1> | ||
<p>The LogAnalyzer open-source app is a simple, plug and play application developed first in collaboration with <a href="https://www.elkem.com/">Elkem</a>. The app provides an ability to get semantically coloured logs for applications deployed on Posit Connect by simply changing the default environment variables and deploying it on Posit Connect. Given the general usefulness of the app, we have decided to share it with the wider community to use and improve upon it. No more sifting through long text files; you can simply find the reds and see where things break. It has never been easier to investigate what goes wrong with your applications.</p> | ||
</section> | ||
<section id="how-it-works" class="level1"> | ||
<h1>How it works?</h1> | ||
<ul> | ||
<li>The LogAnalyzer app uses the Posit Connect API to fetch logs for application run jobs, semantically colouring them so they are easier to read.</li> | ||
<li>The only thing you need to set this up and use is the <code>CONNECT_API_KEY</code> set as an environment variable. The idea is that the key should come from either an admin account or someone with privileges to view all apps. Apps that are not available to a user will not have their logs available to them.</li> | ||
<li>If you want to test the app locally, you will need to set the <code>CONNECT_SERVER</code> as an environment variable. When deployed, the <code>CONNECT_SERVER</code> is setup automatically for you.</li> | ||
</ul> | ||
<div class="quarto-figure quarto-figure-center"> | ||
<figure class="figure"> | ||
<p><img src="https://github.com/Appsilon/LogAnalyzer/assets/26517718/90d1111d-006b-42db-8d8b-b55ee391cb21.png" class="img-fluid figure-img"></p> | ||
<p></p><figcaption class="figure-caption">LogAnalyzerDemo</figcaption><p></p> | ||
</figure> | ||
</div> | ||
</section> | ||
<section id="credits" class="level1"> | ||
<h1>Credits</h1> | ||
<p>It was our collaboration with <img src="https://github.com/Appsilon/LogAnalyzer/assets/26517718/b26fd60b-4989-4d31-a01e-5cf865f5ec9b" alt="Elkem" width="50"> which led to the creation of this app. The initial idea came from use-cases where we realised we wanted to track all the logs and be able to read them properly since Posit Connect was the de facto deployment environment. When we made this app, we realised there was potential in sharing this with the rest of the community and invite everyone to use it and add it. We appreciate and thank Elkem for their openness to share it with the world.</p> | ||
<p>You can read more about Appsilon and Elkem’s collaboration on our case study <a href="https://www.appsilon.com/case-studies/refining-elkems-processes-with-advanced-data-analytics">here</a>.</p> | ||
<section id="appsilon" class="level2"> | ||
<h2 class="anchored" data-anchor-id="appsilon">Appsilon</h2> | ||
<p><img src="https://avatars0.githubusercontent.com/u/6096772" align="right" alt="" width="6%"></p> | ||
<p>Appsilon is a <strong>Posit (formerly RStudio) Full Service Certified Partner</strong>.<br> Learn more at <a href="https://appsilon.com">appsilon.com</a>.</p> | ||
<p>Get in touch <a href="mailto:opensource@appsilon.com">opensource@appsilon.com</a></p> | ||
<p>Explore the <a href="https://rhinoverse.dev">Rhinoverse</a> - a family of R packages built around <a href="https://appsilon.github.io/rhino/">Rhino</a>!</p> | ||
<p><a href="https://appsilon.us16.list-manage.com/subscribe?u=c042d7c0dbf57c5c6f8b54598&id=870d5bfc05" target="_blank"> <img src="https://raw.githubusercontent.com/Appsilon/website-cdn/gh-pages/shiny_weekly_light.jpg" alt="Subscribe for Shiny tutorials, exclusive articles, R/Shiny community events, and more."> </a></p> | ||
|
||
|
||
</section> | ||
</section> | ||
|
||
</main> <!-- /main --> | ||
<script id="quarto-html-after-body" type="application/javascript"> | ||
window.document.addEventListener("DOMContentLoaded", function (event) { | ||
const toggleBodyColorMode = (bsSheetEl) => { | ||
const mode = bsSheetEl.getAttribute("data-mode"); | ||
const bodyEl = window.document.querySelector("body"); | ||
if (mode === "dark") { | ||
bodyEl.classList.add("quarto-dark"); | ||
bodyEl.classList.remove("quarto-light"); | ||
} else { | ||
bodyEl.classList.add("quarto-light"); | ||
bodyEl.classList.remove("quarto-dark"); | ||
} | ||
} | ||
const toggleBodyColorPrimary = () => { | ||
const bsSheetEl = window.document.querySelector("link#quarto-bootstrap"); | ||
if (bsSheetEl) { | ||
toggleBodyColorMode(bsSheetEl); | ||
} | ||
} | ||
toggleBodyColorPrimary(); | ||
const icon = ""; | ||
const anchorJS = new window.AnchorJS(); | ||
anchorJS.options = { | ||
placement: 'right', | ||
icon: icon | ||
}; | ||
anchorJS.add('.anchored'); | ||
const clipboard = new window.ClipboardJS('.code-copy-button', { | ||
target: function(trigger) { | ||
return trigger.previousElementSibling; | ||
} | ||
}); | ||
clipboard.on('success', function(e) { | ||
// button target | ||
const button = e.trigger; | ||
// don't keep focus | ||
button.blur(); | ||
// flash "checked" | ||
button.classList.add('code-copy-button-checked'); | ||
var currentTitle = button.getAttribute("title"); | ||
button.setAttribute("title", "Copied!"); | ||
let tooltip; | ||
if (window.bootstrap) { | ||
button.setAttribute("data-bs-toggle", "tooltip"); | ||
button.setAttribute("data-bs-placement", "left"); | ||
button.setAttribute("data-bs-title", "Copied!"); | ||
tooltip = new bootstrap.Tooltip(button, | ||
{ trigger: "manual", | ||
customClass: "code-copy-button-tooltip", | ||
offset: [0, -8]}); | ||
tooltip.show(); | ||
} | ||
setTimeout(function() { | ||
if (tooltip) { | ||
tooltip.hide(); | ||
button.removeAttribute("data-bs-title"); | ||
button.removeAttribute("data-bs-toggle"); | ||
button.removeAttribute("data-bs-placement"); | ||
} | ||
button.setAttribute("title", currentTitle); | ||
button.classList.remove('code-copy-button-checked'); | ||
}, 1000); | ||
// clear code selection | ||
e.clearSelection(); | ||
}); | ||
function tippyHover(el, contentFn) { | ||
const config = { | ||
allowHTML: true, | ||
content: contentFn, | ||
maxWidth: 500, | ||
delay: 100, | ||
arrow: false, | ||
appendTo: function(el) { | ||
return el.parentElement; | ||
}, | ||
interactive: true, | ||
interactiveBorder: 10, | ||
theme: 'quarto', | ||
placement: 'bottom-start' | ||
}; | ||
window.tippy(el, config); | ||
} | ||
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); | ||
for (var i=0; i<noterefs.length; i++) { | ||
const ref = noterefs[i]; | ||
tippyHover(ref, function() { | ||
// use id or data attribute instead here | ||
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); | ||
try { href = new URL(href).hash; } catch {} | ||
const id = href.replace(/^#\/?/, ""); | ||
const note = window.document.getElementById(id); | ||
return note.innerHTML; | ||
}); | ||
} | ||
const findCites = (el) => { | ||
const parentEl = el.parentElement; | ||
if (parentEl) { | ||
const cites = parentEl.dataset.cites; | ||
if (cites) { | ||
return { | ||
el, | ||
cites: cites.split(' ') | ||
}; | ||
} else { | ||
return findCites(el.parentElement) | ||
} | ||
} else { | ||
return undefined; | ||
} | ||
}; | ||
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); | ||
for (var i=0; i<bibliorefs.length; i++) { | ||
const ref = bibliorefs[i]; | ||
const citeInfo = findCites(ref); | ||
if (citeInfo) { | ||
tippyHover(citeInfo.el, function() { | ||
var popup = window.document.createElement('div'); | ||
citeInfo.cites.forEach(function(cite) { | ||
var citeDiv = window.document.createElement('div'); | ||
citeDiv.classList.add('hanging-indent'); | ||
citeDiv.classList.add('csl-entry'); | ||
var biblioDiv = window.document.getElementById('ref-' + cite); | ||
if (biblioDiv) { | ||
citeDiv.innerHTML = biblioDiv.innerHTML; | ||
} | ||
popup.appendChild(citeDiv); | ||
}); | ||
return popup.innerHTML; | ||
}); | ||
} | ||
} | ||
}); | ||
</script> | ||
</div> <!-- /content --> | ||
|
||
|
||
|
||
</body></html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
<html xmlns="http://www.w3.org/1999/xhtml"> | ||
<head> | ||
<title>Redirect to README.html</title> | ||
<meta http-equiv="refresh" content="0;URL='README.html'" /> | ||
</head> | ||
<body> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
[ | ||
{ | ||
"objectID": "README.html", | ||
"href": "README.html", | ||
"title": "LogAnalyzer", | ||
"section": "", | ||
"text": "The LogAnalyzer open-source app is a simple, plug and play application developed first in collaboration with Elkem. The app provides an ability to get semantically coloured logs for applications deployed on Posit Connect by simply changing the default environment variables and deploying it on Posit Connect. Given the general usefulness of the app, we have decided to share it with the wider community to use and improve upon it. No more sifting through long text files; you can simply find the reds and see where things break. It has never been easier to investigate what goes wrong with your applications." | ||
}, | ||
{ | ||
"objectID": "README.html#appsilon", | ||
"href": "README.html#appsilon", | ||
"title": "LogAnalyzer", | ||
"section": "Appsilon", | ||
"text": "Appsilon\n\nAppsilon is a Posit (formerly RStudio) Full Service Certified Partner. Learn more at appsilon.com.\nGet in touch opensource@appsilon.com\nExplore the Rhinoverse - a family of R packages built around Rhino!" | ||
} | ||
] |
Oops, something went wrong.