Repository files navigation

Garbage

"Time to get started on this. What should I name it?"
"Name it garbage."
"Sounds good. We can backronym it later."

Garbage is a FRC app designed to quickly identify a robot's mechanical issues and their early warning signs from onboard logging data provided by WPILib Data Logs generated by the robot. It can be broken up into three parts:

  • Python Scripts: Reponsible for pulling logs from the RoboRIO automatically, running their through a series of tests called metrics, and storing the result in a
  • MySQL Database: Acts as an accesable store for the processed data, which is used by
  • Grafana: The user facing portion of the app. Pulls data automatically from the SQL database and displays in in a customer (read: pit crew) friendly format.

Sounds like a good deal? Awesome.

Installation

Prerequisites

  1. Install a relational database of some kind. MySQL was used in development, but any relational database supported by SQLAlchemy and Grafana should be OK (so you can technically use GoogleSheets if you wanted).
  2. Install Grafana. Whether you pick the Enterprise or OSS version shouldn't matter.

Python Setup

  1. Clone this repository onto a computer, preferably one that can stay in your pit for the entire event.
  2. Create a new python venv in the folder:
    python -m venv .
  3. Activate the virtual environment using the appropriate script for your OS from the Scripts folder in the venv. For example, on Windows you would run: .\Scripts\Activate.ps1
  4. Install all of the necessary packages from the requirements.txt file:
    pip install -r requirements.txt
  5. Open the file alembic.ini and change the connection URL (the part after sqlalchemy.url =) to match the database you have set up. See the Dialects page on SQLAlchemy's website for more info.
  6. Run alembic upgrade head to initialize the database.

Grafana Setup

  1. Install this traffic light plugin.
  2. Log into Grafana.
  3. Hover over the gear in the bottom left hand corner of the UI and select Data sources.
  4. Click on Add data source and follow the prompts to add your database.
  5. Click on the dashboards button (the one with the four squares) on the left hand side of the UI.
  6. Click New > Import.
  7. Click on Upload JSON file and select one of the dashboards in the dashboards folder from the cloned repo.
  8. Use the same process to add the other dashboards.

Usage

  • Run python garbage.py -d "[your database url from earlier"] to start the program. For more configuration option run python garbage.py --help.
  • Move .wpilog files into the archive/logs (by default) to analyze them.
  • The repo comes with three example groups (collections of metrics). You can either use them or delete them. Learn how to make your own groups.
  • Run python logfile_uploader.py to start a helper program that will automatically transfer your logs to be analyzed. Enter the IP of your team's RoboRIO (10.TE.AM.2 usually) and it will start. Keep an ethernet cable plugged into your computer and have the pit crew turn on the robot and plug in the cable when the robot gets back so the program can transfer the logs.
  • If you are storing your logs on a USB drive or are using a different username/password combo than lvuser/[no password], you will have to change the script yourself.

  • JSON files with the results of the metrics are stored by default in the archive/metrics directory. The names are just the name of the log file the metrics came from along with a timestamp.
  • Use the selectors at the top of the Grafana dashboards to change which groups and metrics you are viewing. You can see a complete list of your dashboards by going back to the Dashboards tab.

About

Hoot and WPILog Analysis System for our FRC robots

Topics

Resources

Stars

0 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Garbage

"Time to get started on this. What should I name it?"
"Name it garbage."
"Sounds good. We can backronym it later."

Garbage is a FRC app designed to quickly identify a robot's mechanical issues and their early warning signs from onboard logging data provided by WPILib Data Logs generated by the robot. It can be broken up into three parts:

  • Python Scripts: Reponsible for pulling logs from the RoboRIO automatically, running their through a series of tests called metrics, and storing the result in a
  • MySQL Database: Acts as an accesable store for the processed data, which is used by
  • Grafana: The user facing portion of the app. Pulls data automatically from the SQL database and displays in in a customer (read: pit crew) friendly format.

Sounds like a good deal? Awesome.

Installation

Prerequisites

  1. Install a relational database of some kind. MySQL was used in development, but any relational database supported by SQLAlchemy and Grafana should be OK (so you can technically use GoogleSheets if you wanted).
  2. Install Grafana. Whether you pick the Enterprise or OSS version shouldn't matter.

Python Setup

  1. Clone this repository onto a computer, preferably one that can stay in your pit for the entire event.
  2. Create a new python venv in the folder:
    python -m venv .
  3. Activate the virtual environment using the appropriate script for your OS from the Scripts folder in the venv. For example, on Windows you would run: .\Scripts\Activate.ps1
  4. Install all of the necessary packages from the requirements.txt file:
    pip install -r requirements.txt
  5. Open the file alembic.ini and change the connection URL (the part after sqlalchemy.url =) to match the database you have set up. See the Dialects page on SQLAlchemy's website for more info.
  6. Run alembic upgrade head to initialize the database.

Grafana Setup

  1. Install this traffic light plugin.
  2. Log into Grafana.
  3. Hover over the gear in the bottom left hand corner of the UI and select Data sources.
  4. Click on Add data source and follow the prompts to add your database.
  5. Click on the dashboards button (the one with the four squares) on the left hand side of the UI.
  6. Click New > Import.
  7. Click on Upload JSON file and select one of the dashboards in the dashboards folder from the cloned repo.
  8. Use the same process to add the other dashboards.

Usage

  • Run python garbage.py -d "[your database url from earlier"] to start the program. For more configuration option run python garbage.py --help.
  • Move .wpilog files into the archive/logs (by default) to analyze them.
  • The repo comes with three example groups (collections of metrics). You can either use them or delete them. Learn how to make your own groups.
  • Run python logfile_uploader.py to start a helper program that will automatically transfer your logs to be analyzed. Enter the IP of your team's RoboRIO (10.TE.AM.2 usually) and it will start. Keep an ethernet cable plugged into your computer and have the pit crew turn on the robot and plug in the cable when the robot gets back so the program can transfer the logs.
  • If you are storing your logs on a USB drive or are using a different username/password combo than lvuser/[no password], you will have to change the script yourself.

  • JSON files with the results of the metrics are stored by default in the archive/metrics directory. The names are just the name of the log file the metrics came from along with a timestamp.
  • Use the selectors at the top of the Grafana dashboards to change which groups and metrics you are viewing. You can see a complete list of your dashboards by going back to the Dashboards tab.

About

Hoot and WPILog Analysis System for our FRC robots

Topics

Resources

Stars

0 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Garbage

"Time to get started on this. What should I name it?"
"Name it garbage."
"Sounds good. We can backronym it later."

Garbage is a FRC app designed to quickly identify a robot's mechanical issues and their early warning signs from onboard logging data provided by WPILib Data Logs generated by the robot. It can be broken up into three parts:

  • Python Scripts: Reponsible for pulling logs from the RoboRIO automatically, running their through a series of tests called metrics, and storing the result in a
  • MySQL Database: Acts as an accesable store for the processed data, which is used by
  • Grafana: The user facing portion of the app. Pulls data automatically from the SQL database and displays in in a customer (read: pit crew) friendly format.

Sounds like a good deal? Awesome.

Installation

Prerequisites

  1. Install a relational database of some kind. MySQL was used in development, but any relational database supported by SQLAlchemy and Grafana should be OK (so you can technically use GoogleSheets if you wanted).
  2. Install Grafana. Whether you pick the Enterprise or OSS version shouldn't matter.

Python Setup

  1. Clone this repository onto a computer, preferably one that can stay in your pit for the entire event.
  2. Create a new python venv in the folder:
    python -m venv .
  3. Activate the virtual environment using the appropriate script for your OS from the Scripts folder in the venv. For example, on Windows you would run: .\Scripts\Activate.ps1
  4. Install all of the necessary packages from the requirements.txt file:
    pip install -r requirements.txt
  5. Open the file alembic.ini and change the connection URL (the part after sqlalchemy.url =) to match the database you have set up. See the Dialects page on SQLAlchemy's website for more info.
  6. Run alembic upgrade head to initialize the database.

Grafana Setup

  1. Install this traffic light plugin.
  2. Log into Grafana.
  3. Hover over the gear in the bottom left hand corner of the UI and select Data sources.
  4. Click on Add data source and follow the prompts to add your database.
  5. Click on the dashboards button (the one with the four squares) on the left hand side of the UI.
  6. Click New > Import.
  7. Click on Upload JSON file and select one of the dashboards in the dashboards folder from the cloned repo.
  8. Use the same process to add the other dashboards.

Usage

  • Run python garbage.py -d "[your database url from earlier"] to start the program. For more configuration option run python garbage.py --help.
  • Move .wpilog files into the archive/logs (by default) to analyze them.
  • The repo comes with three example groups (collections of metrics). You can either use them or delete them. Learn how to make your own groups.
  • Run python logfile_uploader.py to start a helper program that will automatically transfer your logs to be analyzed. Enter the IP of your team's RoboRIO (10.TE.AM.2 usually) and it will start. Keep an ethernet cable plugged into your computer and have the pit crew turn on the robot and plug in the cable when the robot gets back so the program can transfer the logs.
  • If you are storing your logs on a USB drive or are using a different username/password combo than lvuser/[no password], you will have to change the script yourself.

  • JSON files with the results of the metrics are stored by default in the archive/metrics directory. The names are just the name of the log file the metrics came from along with a timestamp.
  • Use the selectors at the top of the Grafana dashboards to change which groups and metrics you are viewing. You can see a complete list of your dashboards by going back to the Dashboards tab.

About

Hoot and WPILog Analysis System for our FRC robots

Topics

Resources

Stars

0 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Garbage

"Time to get started on this. What should I name it?"
"Name it garbage."
"Sounds good. We can backronym it later."

Garbage is a FRC app designed to quickly identify a robot's mechanical issues and their early warning signs from onboard logging data provided by WPILib Data Logs generated by the robot. It can be broken up into three parts:

  • Python Scripts: Reponsible for pulling logs from the RoboRIO automatically, running their through a series of tests called metrics, and storing the result in a
  • MySQL Database: Acts as an accesable store for the processed data, which is used by
  • Grafana: The user facing portion of the app. Pulls data automatically from the SQL database and displays in in a customer (read: pit crew) friendly format.

Sounds like a good deal? Awesome.

Installation

Prerequisites

  1. Install a relational database of some kind. MySQL was used in development, but any relational database supported by SQLAlchemy and Grafana should be OK (so you can technically use GoogleSheets if you wanted).
  2. Install Grafana. Whether you pick the Enterprise or OSS version shouldn't matter.

Python Setup

  1. Clone this repository onto a computer, preferably one that can stay in your pit for the entire event.
  2. Create a new python venv in the folder:
    python -m venv .
  3. Activate the virtual environment using the appropriate script for your OS from the Scripts folder in the venv. For example, on Windows you would run: .\Scripts\Activate.ps1
  4. Install all of the necessary packages from the requirements.txt file:
    pip install -r requirements.txt
  5. Open the file alembic.ini and change the connection URL (the part after sqlalchemy.url =) to match the database you have set up. See the Dialects page on SQLAlchemy's website for more info.
  6. Run alembic upgrade head to initialize the database.

Grafana Setup

  1. Install this traffic light plugin.
  2. Log into Grafana.
  3. Hover over the gear in the bottom left hand corner of the UI and select Data sources.
  4. Click on Add data source and follow the prompts to add your database.
  5. Click on the dashboards button (the one with the four squares) on the left hand side of the UI.
  6. Click New > Import.
  7. Click on Upload JSON file and select one of the dashboards in the dashboards folder from the cloned repo.
  8. Use the same process to add the other dashboards.

Usage

  • Run python garbage.py -d "[your database url from earlier"] to start the program. For more configuration option run python garbage.py --help.
  • Move .wpilog files into the archive/logs (by default) to analyze them.
  • The repo comes with three example groups (collections of metrics). You can either use them or delete them. Learn how to make your own groups.
  • Run python logfile_uploader.py to start a helper program that will automatically transfer your logs to be analyzed. Enter the IP of your team's RoboRIO (10.TE.AM.2 usually) and it will start. Keep an ethernet cable plugged into your computer and have the pit crew turn on the robot and plug in the cable when the robot gets back so the program can transfer the logs.
  • If you are storing your logs on a USB drive or are using a different username/password combo than lvuser/[no password], you will have to change the script yourself.

  • JSON files with the results of the metrics are stored by default in the archive/metrics directory. The names are just the name of the log file the metrics came from along with a timestamp.
  • Use the selectors at the top of the Grafana dashboards to change which groups and metrics you are viewing. You can see a complete list of your dashboards by going back to the Dashboards tab.

About

Hoot and WPILog Analysis System for our FRC robots

Topics

Resources

Stars

0 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Garbage

"Time to get started on this. What should I name it?"
"Name it garbage."
"Sounds good. We can backronym it later."

Garbage is a FRC app designed to quickly identify a robot's mechanical issues and their early warning signs from onboard logging data provided by WPILib Data Logs generated by the robot. It can be broken up into three parts:

  • Python Scripts: Reponsible for pulling logs from the RoboRIO automatically, running their through a series of tests called metrics, and storing the result in a
  • MySQL Database: Acts as an accesable store for the processed data, which is used by
  • Grafana: The user facing portion of the app. Pulls data automatically from the SQL database and displays in in a customer (read: pit crew) friendly format.

Sounds like a good deal? Awesome.

Installation

Prerequisites

  1. Install a relational database of some kind. MySQL was used in development, but any relational database supported by SQLAlchemy and Grafana should be OK (so you can technically use GoogleSheets if you wanted).
  2. Install Grafana. Whether you pick the Enterprise or OSS version shouldn't matter.

Python Setup

  1. Clone this repository onto a computer, preferably one that can stay in your pit for the entire event.
  2. Create a new python venv in the folder:
    python -m venv .
  3. Activate the virtual environment using the appropriate script for your OS from the Scripts folder in the venv. For example, on Windows you would run: .\Scripts\Activate.ps1
  4. Install all of the necessary packages from the requirements.txt file:
    pip install -r requirements.txt
  5. Open the file alembic.ini and change the connection URL (the part after sqlalchemy.url =) to match the database you have set up. See the Dialects page on SQLAlchemy's website for more info.
  6. Run alembic upgrade head to initialize the database.

Grafana Setup

  1. Install this traffic light plugin.
  2. Log into Grafana.
  3. Hover over the gear in the bottom left hand corner of the UI and select Data sources.
  4. Click on Add data source and follow the prompts to add your database.
  5. Click on the dashboards button (the one with the four squares) on the left hand side of the UI.
  6. Click New > Import.
  7. Click on Upload JSON file and select one of the dashboards in the dashboards folder from the cloned repo.
  8. Use the same process to add the other dashboards.

Usage

  • Run python garbage.py -d "[your database url from earlier"] to start the program. For more configuration option run python garbage.py --help.
  • Move .wpilog files into the archive/logs (by default) to analyze them.
  • The repo comes with three example groups (collections of metrics). You can either use them or delete them. Learn how to make your own groups.
  • Run python logfile_uploader.py to start a helper program that will automatically transfer your logs to be analyzed. Enter the IP of your team's RoboRIO (10.TE.AM.2 usually) and it will start. Keep an ethernet cable plugged into your computer and have the pit crew turn on the robot and plug in the cable when the robot gets back so the program can transfer the logs.
  • If you are storing your logs on a USB drive or are using a different username/password combo than lvuser/[no password], you will have to change the script yourself.

  • JSON files with the results of the metrics are stored by default in the archive/metrics directory. The names are just the name of the log file the metrics came from along with a timestamp.
  • Use the selectors at the top of the Grafana dashboards to change which groups and metrics you are viewing. You can see a complete list of your dashboards by going back to the Dashboards tab.

About

Hoot and WPILog Analysis System for our FRC robots

Topics

Resources

Stars

0 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Garbage

"Time to get started on this. What should I name it?"
"Name it garbage."
"Sounds good. We can backronym it later."

Garbage is a FRC app designed to quickly identify a robot's mechanical issues and their early warning signs from onboard logging data provided by WPILib Data Logs generated by the robot. It can be broken up into three parts:

  • Python Scripts: Reponsible for pulling logs from the RoboRIO automatically, running their through a series of tests called metrics, and storing the result in a
  • MySQL Database: Acts as an accesable store for the processed data, which is used by
  • Grafana: The user facing portion of the app. Pulls data automatically from the SQL database and displays in in a customer (read: pit crew) friendly format.

Sounds like a good deal? Awesome.

Installation

Prerequisites

  1. Install a relational database of some kind. MySQL was used in development, but any relational database supported by SQLAlchemy and Grafana should be OK (so you can technically use GoogleSheets if you wanted).
  2. Install Grafana. Whether you pick the Enterprise or OSS version shouldn't matter.

Python Setup

  1. Clone this repository onto a computer, preferably one that can stay in your pit for the entire event.
  2. Create a new python venv in the folder:
    python -m venv .
  3. Activate the virtual environment using the appropriate script for your OS from the Scripts folder in the venv. For example, on Windows you would run: .\Scripts\Activate.ps1
  4. Install all of the necessary packages from the requirements.txt file:
    pip install -r requirements.txt
  5. Open the file alembic.ini and change the connection URL (the part after sqlalchemy.url =) to match the database you have set up. See the Dialects page on SQLAlchemy's website for more info.
  6. Run alembic upgrade head to initialize the database.

Grafana Setup

  1. Install this traffic light plugin.
  2. Log into Grafana.
  3. Hover over the gear in the bottom left hand corner of the UI and select Data sources.
  4. Click on Add data source and follow the prompts to add your database.
  5. Click on the dashboards button (the one with the four squares) on the left hand side of the UI.
  6. Click New > Import.
  7. Click on Upload JSON file and select one of the dashboards in the dashboards folder from the cloned repo.
  8. Use the same process to add the other dashboards.

Usage

  • Run python garbage.py -d "[your database url from earlier"] to start the program. For more configuration option run python garbage.py --help.
  • Move .wpilog files into the archive/logs (by default) to analyze them.
  • The repo comes with three example groups (collections of metrics). You can either use them or delete them. Learn how to make your own groups.
  • Run python logfile_uploader.py to start a helper program that will automatically transfer your logs to be analyzed. Enter the IP of your team's RoboRIO (10.TE.AM.2 usually) and it will start. Keep an ethernet cable plugged into your computer and have the pit crew turn on the robot and plug in the cable when the robot gets back so the program can transfer the logs.
  • If you are storing your logs on a USB drive or are using a different username/password combo than lvuser/[no password], you will have to change the script yourself.

  • JSON files with the results of the metrics are stored by default in the archive/metrics directory. The names are just the name of the log file the metrics came from along with a timestamp.
  • Use the selectors at the top of the Grafana dashboards to change which groups and metrics you are viewing. You can see a complete list of your dashboards by going back to the Dashboards tab.

About

Hoot and WPILog Analysis System for our FRC robots

Topics

Resources

Stars

0 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Garbage

"Time to get started on this. What should I name it?"
"Name it garbage."
"Sounds good. We can backronym it later."

Garbage is a FRC app designed to quickly identify a robot's mechanical issues and their early warning signs from onboard logging data provided by WPILib Data Logs generated by the robot. It can be broken up into three parts:

  • Python Scripts: Reponsible for pulling logs from the RoboRIO automatically, running their through a series of tests called metrics, and storing the result in a
  • MySQL Database: Acts as an accesable store for the processed data, which is used by
  • Grafana: The user facing portion of the app. Pulls data automatically from the SQL database and displays in in a customer (read: pit crew) friendly format.

Sounds like a good deal? Awesome.

Installation

Prerequisites

  1. Install a relational database of some kind. MySQL was used in development, but any relational database supported by SQLAlchemy and Grafana should be OK (so you can technically use GoogleSheets if you wanted).
  2. Install Grafana. Whether you pick the Enterprise or OSS version shouldn't matter.

Python Setup

  1. Clone this repository onto a computer, preferably one that can stay in your pit for the entire event.
  2. Create a new python venv in the folder:
    python -m venv .
  3. Activate the virtual environment using the appropriate script for your OS from the Scripts folder in the venv. For example, on Windows you would run: .\Scripts\Activate.ps1
  4. Install all of the necessary packages from the requirements.txt file:
    pip install -r requirements.txt
  5. Open the file alembic.ini and change the connection URL (the part after sqlalchemy.url =) to match the database you have set up. See the Dialects page on SQLAlchemy's website for more info.
  6. Run alembic upgrade head to initialize the database.

Grafana Setup

  1. Install this traffic light plugin.
  2. Log into Grafana.
  3. Hover over the gear in the bottom left hand corner of the UI and select Data sources.
  4. Click on Add data source and follow the prompts to add your database.
  5. Click on the dashboards button (the one with the four squares) on the left hand side of the UI.
  6. Click New > Import.
  7. Click on Upload JSON file and select one of the dashboards in the dashboards folder from the cloned repo.
  8. Use the same process to add the other dashboards.

Usage

  • Run python garbage.py -d "[your database url from earlier"] to start the program. For more configuration option run python garbage.py --help.
  • Move .wpilog files into the archive/logs (by default) to analyze them.
  • The repo comes with three example groups (collections of metrics). You can either use them or delete them. Learn how to make your own groups.
  • Run python logfile_uploader.py to start a helper program that will automatically transfer your logs to be analyzed. Enter the IP of your team's RoboRIO (10.TE.AM.2 usually) and it will start. Keep an ethernet cable plugged into your computer and have the pit crew turn on the robot and plug in the cable when the robot gets back so the program can transfer the logs.
  • If you are storing your logs on a USB drive or are using a different username/password combo than lvuser/[no password], you will have to change the script yourself.

  • JSON files with the results of the metrics are stored by default in the archive/metrics directory. The names are just the name of the log file the metrics came from along with a timestamp.
  • Use the selectors at the top of the Grafana dashboards to change which groups and metrics you are viewing. You can see a complete list of your dashboards by going back to the Dashboards tab.

About

Hoot and WPILog Analysis System for our FRC robots

Topics

Resources

Stars

0 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Garbage

"Time to get started on this. What should I name it?"
"Name it garbage."
"Sounds good. We can backronym it later."

Garbage is a FRC app designed to quickly identify a robot's mechanical issues and their early warning signs from onboard logging data provided by WPILib Data Logs generated by the robot. It can be broken up into three parts:

  • Python Scripts: Reponsible for pulling logs from the RoboRIO automatically, running their through a series of tests called metrics, and storing the result in a
  • MySQL Database: Acts as an accesable store for the processed data, which is used by
  • Grafana: The user facing portion of the app. Pulls data automatically from the SQL database and displays in in a customer (read: pit crew) friendly format.

Sounds like a good deal? Awesome.

Installation

Prerequisites

  1. Install a relational database of some kind. MySQL was used in development, but any relational database supported by SQLAlchemy and Grafana should be OK (so you can technically use GoogleSheets if you wanted).
  2. Install Grafana. Whether you pick the Enterprise or OSS version shouldn't matter.

Python Setup

  1. Clone this repository onto a computer, preferably one that can stay in your pit for the entire event.
  2. Create a new python venv in the folder:
    python -m venv .
  3. Activate the virtual environment using the appropriate script for your OS from the Scripts folder in the venv. For example, on Windows you would run: .\Scripts\Activate.ps1
  4. Install all of the necessary packages from the requirements.txt file:
    pip install -r requirements.txt
  5. Open the file alembic.ini and change the connection URL (the part after sqlalchemy.url =) to match the database you have set up. See the Dialects page on SQLAlchemy's website for more info.
  6. Run alembic upgrade head to initialize the database.

Grafana Setup

  1. Install this traffic light plugin.
  2. Log into Grafana.
  3. Hover over the gear in the bottom left hand corner of the UI and select Data sources.
  4. Click on Add data source and follow the prompts to add your database.
  5. Click on the dashboards button (the one with the four squares) on the left hand side of the UI.
  6. Click New > Import.
  7. Click on Upload JSON file and select one of the dashboards in the dashboards folder from the cloned repo.
  8. Use the same process to add the other dashboards.

Usage

  • Run python garbage.py -d "[your database url from earlier"] to start the program. For more configuration option run python garbage.py --help.
  • Move .wpilog files into the archive/logs (by default) to analyze them.
  • The repo comes with three example groups (collections of metrics). You can either use them or delete them. Learn how to make your own groups.
  • Run python logfile_uploader.py to start a helper program that will automatically transfer your logs to be analyzed. Enter the IP of your team's RoboRIO (10.TE.AM.2 usually) and it will start. Keep an ethernet cable plugged into your computer and have the pit crew turn on the robot and plug in the cable when the robot gets back so the program can transfer the logs.
  • If you are storing your logs on a USB drive or are using a different username/password combo than lvuser/[no password], you will have to change the script yourself.

  • JSON files with the results of the metrics are stored by default in the archive/metrics directory. The names are just the name of the log file the metrics came from along with a timestamp.
  • Use the selectors at the top of the Grafana dashboards to change which groups and metrics you are viewing. You can see a complete list of your dashboards by going back to the Dashboards tab.

About

Hoot and WPILog Analysis System for our FRC robots

Topics

Resources

Stars

0 stars

Watchers

2 watching

Forks

Used by

Contributors

Languages