{"id":22760386,"url":"https://github.com/bluedotbrigade/weevil","last_synced_at":"2025-04-14T19:14:35.391Z","repository":{"id":38027746,"uuid":"320817472","full_name":"BlueDotBrigade/weevil","owner":"BlueDotBrigade","description":"Filter, analyze and gain valuable insight into log files. It's all about \"boring log files for tasty bytes\".","archived":false,"fork":false,"pushed_at":"2025-04-09T23:10:08.000Z","size":3686,"stargazers_count":16,"open_issues_count":99,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-14T19:13:58.614Z","etag":null,"topics":["analysis","analysis-framework","csharp","log","logs","weevil","wpf"],"latest_commit_sha":null,"homepage":"http://Weevil.BlueDotBrigade.com","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BlueDotBrigade.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-12T11:44:54.000Z","updated_at":"2025-04-09T10:17:25.000Z","dependencies_parsed_at":"2023-01-30T21:01:20.204Z","dependency_job_id":"41a030d9-1792-4461-93da-82545e0e4bcc","html_url":"https://github.com/BlueDotBrigade/weevil","commit_stats":{"total_commits":771,"total_committers":5,"mean_commits":154.2,"dds":0.1867704280155642,"last_synced_commit":"65c2e2706fd300753c727b9dd7ff9b69d611b665"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlueDotBrigade%2Fweevil","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlueDotBrigade%2Fweevil/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlueDotBrigade%2Fweevil/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlueDotBrigade%2Fweevil/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BlueDotBrigade","download_url":"https://codeload.github.com/BlueDotBrigade/weevil/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248943461,"owners_count":21186958,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analysis","analysis-framework","csharp","log","logs","weevil","wpf"],"created_at":"2024-12-11T09:06:55.840Z","updated_at":"2025-04-14T19:14:35.372Z","avatar_url":"https://github.com/BlueDotBrigade.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Weevil\n\n[![Latest Release](https://img.shields.io/github/release/BlueDotBrigade/Weevil.svg?label=Latest%20Release)](https://github.com/BlueDotBrigade/weevil/releases/)\n[![Latest Build](https://github.com/BlueDotBrigade/weevil/actions/workflows/build-all-projects.yml/badge.svg?branch=main)](https://github.com/BlueDotBrigade/weevil/actions/workflows/build-all-projects.yml)\n\n- [What is Weevil?](#what-is-weevil)\n- [Key Features](#key-features)\n   - [Filtering](#filtering)\n   - [Navigation](#navigation)\n   - [Analysis](#analysis)\n   - [Extensible Architecture](#extensible-architecture)\n- [Software Development](#software-development)\n   - [WPF Application](#wpf-application)\n   - [NuGet Packages](#nuget-packages)\n- [Development](#development)\n   - [Guidelines](#guidelines)\n   - [Compiling](#compiling)\n   - [Verification](#verification)\n- [Recognition](#recognition)\n   - [Open Source Projects](#open-source-projects)\n   - [Contributors](#contributors)\n\n## What is Weevil?\n\n![WeevilDemo](Doc/Notes/Release/v10_0_0/Weevil-Demo.gif)\n\n_Weevil_ is an open-source .NET project that is used by analysts to extract valuable insights from log files.  It's all about _boring log files for tasty bytes_.\n\nA complete list of features can be found in the [release notes](https://github.com/BlueDotBrigade/weevil/releases).\n\n## Key Features\n\n1. File and Record Level Notes\n    - Capture high-level observations as remarks, or low-level details as record comments.\n2. Persisted State\n    - Automatically load filter history, record comments, and file level comments when opening a log file.\n    - Share the application's state as an XML [sidecar][Sidecar] with colleagues.\n3. Non-Destructive Operations\n\t - The _Weevil_ application ensures that the original log file is never modified.\n4. Simplified Callstacks\n    - When a record includes an exception call stack, _Weevil_ simplifies the call stack by only displaying business logic references.\n5. Clear Operations\n\t - This operation removes records from memory, thus reducing the RAM footprint and speeding up the filtering process.\n\n### Filtering\n\nOne or more filter criteria can be used to show or hide log file records.\n\n1. Inclusive and Exclusive Filters\n    - Display records matching the inclusive filter while hiding those matching the exclusive filter.\n2. Filter Criteria\n\t 1. Plain Text\n\t 2. Regular Expressions\n\t 3. Aliases\n\t\t  - Frequently used or complex filters can be assigned a unique key that can be used to speed up the filtering process.\n\t\t  - For example, the `#IpAddress` key could be assigned to the following filter criteria  `^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$`.\n\t 4. Monikers\n        - Monikers are built-in keys that can be used to query metadata collected by _Weevil_.\n\t\t  - For example, the `@Comment` can be used to identify records that have a user comment.\n3. Multiple Criteria\n    - Multiple filter criteria can be combined together using a logical \"OR\" operator (`||`).\n4. Pinned Records\n\t - Pinned records are guaranteed to be included in the filter results.\n\n### Navigation\n\n1. Find\n    - Search for text within filtered results.\n2. Go To\n    - Jump to specific line numbers or timestamps.\n3. Pinned Records\n    - Effortlessly navigate between important records.\n4. Flagged Records\n    - Move between records flagged during prior analysis. \n5. Record Comments\n    - Navigate between records containing user comments.\n\n### Analysis\n\nUtilize [Regular expression][RegEx101] named groups to identify key data in log files. Leverage _Weevil_'s analysis tools to then extract data and identify trends.\n\nEach analysis tool updates the `Comments` fields with the values that match the provided named group(s), and the recor's `Flagged` field is set.\n\n1. Detect Data\n   - For example: extracting URLs from a log file\n2. Detect Data Transitions\n   - For example: when a hardware serial number changes\n3. Detect Rising Edges\n   - For example: detecting peek CPU usage\n4. Detect Falling Edges\n   - For example: detect when a firmware's uptime has reset\n5. Detect Temporal Anomalies\n   - For example: detect when records are logged out of order\n\nFurthermore, _Weevil_ supports:\n- defining Regions of Interest (ROI)\n- creating graphs using named groups\n\n### Extensible Architecture\n\nMaximize potential by developing domain-specific extensions tailored to your business' needs. _Weevil_ can be enhanced by custom plugins:\n\n1. Log File Parsers\n   - Create tailored parsers to accurately interpret log files from various sources and formats, ensuring seamless integration with _Weevil_.\n2. Log File Analyzers\n   - Design specialized analyzers to process and extract valuable insights from the parsed log data, optimizing the analysis for your specific business domain.\n3. Dashboard Insights\n   - Develop custom dashboard visualizations and insights that highlight the most relevant information, enabling efficient decision-making and improved understanding of your log data.\n\n## Software Development\n\n### WPF Application\n\n- [Installation Guide][InstallationGuide]\n- [Help Manual][Help]\n\n### NuGet Packages\n\n| Latest Release                                                                                                                                  | NuGet Package                       |\n| ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- |\n| [![latest version](https://img.shields.io/nuget/v/BlueDotBrigade.Weevil.Common)](https://www.nuget.org/packages/BlueDotBrigade.Weevil.Common)   | BlueDotBrigade.Weevil.Common.nupkg  |\n| [![latest version](https://img.shields.io/nuget/v/BlueDotBrigade.Weevil.Core)](https://www.nuget.org/packages/BlueDotBrigade.Weevil.Core)       | BlueDotBrigade.Weevil.Core.nupkg    |\n| [![latest version](https://img.shields.io/nuget/v/BlueDotBrigade.Weevil.Windows)](https://www.nuget.org/packages/BlueDotBrigade.Weevil.Windows) | BlueDotBrigade.Weevil.Windows.nupkg |\n\nA .NET application can use *Weevil*'s feature set by directly referencing the `BlueDotBrigade.Weevil.Core` *NuGet* package.\n\nFor example, one could determine when equipment was changed using the following sample code:\n\n```CSharp\nvar engine = Engine\n   .UsingPath(@\"C:\\Temp\\hardware.log\")\n   .Open();\n\n// The `UniqueId` regular expression named group is used to\n// capture serial hardware serial numbers.\nengine.Filter.Apply(\n   FilterType.RegularExpression,\n   new FilterCriteria(@\"Received hardware message. ID=(?\u003cUniqueId\u003e[a-zA-Z0-9]+)\"));\n\n// This type of analysis compares the captured serial numbers,\n// and flags the record when a value changes.\nengine.Analyzer.Analyze(AnalysisType.DetectDataTransition);\n\nforeach (var record in engine.Filter.Results.Where(r =\u003e r.Metadata.IsFlagged == true))\n{\n   Console.WriteLine(\n   $\"{record.CreatedAt} {record.Metadata.Comment}\");\n}\n```\n\n## Development\n\n| Attribute                                                                                                                                                                                        | Description                                                                                                |\n| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- |\n| [![GitHub Latest Release](https://img.shields.io/github/release/BlueDotBrigade/Weevil.svg?label=Latest%20Release)](https://github.com/BlueDotBrigade/weevil/releases)                                                   | The list of features \u0026 bug fixes for the latest *Weevil* release.                                          |\n| [![Latest Stable](https://img.shields.io/badge/branch-Releases/2.x-blue?label=Release%20Branch)](https://github.com/BlueDotBrigade/weevil/tree/Releases/2.x)                                                            | Source code for the most stable version of *Weevil*.                                                       |\n| [![Latest Code](https://img.shields.io/badge/branch-main-blue?label=Development%20Branch)](https://github.com/BlueDotBrigade/weevil/tree/main)                                                                              | The most up-to-date source code. This branch includes features that are still under development.           |\n| [![Latest Build](https://github.com/BlueDotBrigade/weevil/actions/workflows/build-all-projects.yml/badge.svg?branch=main)](https://github.com/BlueDotBrigade/weevil/actions/workflows/build-all-projects.yml)                        | A value of `passing` indicates that the `main` branch is compiling \u0026 that the automated tests have passed. |\n| [![GitHub Repository Size](https://img.shields.io/github/repo-size/BlueDotBrigade/Weevil)](https://github.com/BlueDotBrigade/Weevil)                                                             | Total size of *Weevil*'s Git repository.                                                                   |\n| [![Lines of code](https://img.shields.io/tokei/lines/github/BlueDotBrigade/Weevil.svg)](https://github.com/BlueDotBrigade/weevil/)                                                               | Total number of lines of code in the Git repository.                                                       |\n| [![Last Commit](https://img.shields.io/github/last-commit/BlueDotBrigade/Weevil/main.svg)](https://github.com/BlueDotBrigade/weevil/commits/main)                                                | Indicates when the Git repository was last updated.                                                        |\n\n### Guidelines\n\n- When working on the WPF application, please be sure to follow the [Style Guide][StyleGuide] for the user interface.\n\n### Compiling\n\nThe following steps outline how to build Weevil's WPF application:\n\n1. Download the latest [stable release][StableCode] source code.\n2. If you have implemented a custom *Weevil* plugin:\n   - Prior to starting Visual Studio, create the following Windows [environment variable][EnvironmentVariable]:\n      - `%WEEVIL_PLUGINS_PATH%` which refers to the directory where the Weevil plugin assembly (`*.dll`) can be found.\n3. Using *Visual Studio*, compile the WPF project: `BlueDotBrigade.Weevil.Gui`\n[EnvironmentVariable]: https://en.wikipedia.org/wiki/Environment_variable#Windows\n\n### Verification\n\nSoftware integrity is verified through a number of automated tests which can be found in the [/Weevil/Tst/][AutomatedTests] directory:\n\n- `UnitTests`\n- `FunctionalTests`\n\n## Recognition\n\n- [PostSharp](https://www.postsharp.net/)\n   - *PostSharp*`s [aspect oriented][AOP] library helps to simplify a code base by reducing [boilerplate][]. Special thanks to the PostSharp team for donating a license.\n- [GitHub](https://www.GitHub.com)\n   - Free Git repository hosting platform for this project \u0026 many others like it.\n\n### Open Source Projects\n\n- [Live Charts](https://github.com/beto-rodriguez/LiveCharts2)\n    - Beto Rodriguez et al. have developed an impressive WPF charting library. Am looking forward to future releases. \n- [Material Design in XAML](https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit)\n    - An excellent WPF library that helps to standardize themes \u0026 improve the overall quality of an application's user interface.\n- [Cocona](https://github.com/mayuki/Cocona)\n    - Mayuki Sawatari et al. have created an interesting library for creating .NET Core command-line applications.\n\n### Contributors\n\nA special thanks to all of those who have contributed to this project. \n\n[InstallationGuide]: https://github.com/BlueDotBrigade/weevil/blob/Releases/2.x/Doc/Notes/Release/InstallationGuide.md\n[Help]: https://github.com/BlueDotBrigade/weevil/blob/Releases/2.x/Doc/Notes/Release/Help.md\n[StyleGuide]: https://github.com/BlueDotBrigade/weevil/blob/main/Doc/Notes/Design/UI/UserInterfaceStyleGuide.md\n\n[RegEx101]: https://regex101.com/\n[Sidecar]: https://en.wikipedia.org/wiki/Sidecar_file\n\n[StableCode]: https://github.com/BlueDotBrigade/weevil/tree/Releases/2.x\n\n[Boilerplate]: https://en.m.wikipedia.org/wiki/Boilerplate_code\n[AOP]: https://en.m.wikipedia.org/wiki/Aspect-oriented_programming\n\n[AutomatedTests]: https://github.com/BlueDotBrigade/weevil/tree/main/Tst\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbluedotbrigade%2Fweevil","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbluedotbrigade%2Fweevil","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbluedotbrigade%2Fweevil/lists"}