shinyproxyLogs is an R package designed to simplify the process of parsing and analyzing log files generated by ShinyProxy containers. The package provides a set of functions that allow users to extract metadata from log filenames and compute summary statistics from log content. This helps system administrators and developers quickly identify issues such as errors, warnings, and fatal events in their ShinyProxy logs.
Project Goal
The primary goal of shinyproxyLogs is to automate and streamline the log analysis process for ShinyProxy environments. Specifically, the package:
-
Parses Log File Names: Extracts important metadata such as
specId
,proxyId
,startupTime
, andlogType
from the log file names. - Analyzes Log Content: Reads the log files and computes statistics including the total number of lines, and counts of error, warning, and fatal messages.
- Provides Summary Reports: Aggregates data by container (based on the metadata) to offer a concise overview of the container logs.
Prerequisites
Access Rights: To use shinyproxyLogs, you must have the necessary access rights to the shinyproxy
folder. This folder contains the logs from the ShinyProxy container, and without proper permissions, the package will not be able to read or process the log files. Please ensure that you have the required read and access permissions to the ShinyProxy logs directory before using this package.
Installation
You can install the development version of shinyproxyLogs like so:
install.packages("devtools")
devtools::install_github("tsenegas/shinyproxyLogs")
Example
This is a basic example which shows you how to solve a common problem:
library(shinyproxyLogs)
## basic example code
analyze_logs(path_container_logs = '../../shinyproxy/shinyproxy/container-logs/logs/')
#> $file_info
#> # A tibble: 30 × 10
#> specId proxyId startupTime logType filePath numLines numErrorLines
#> <chr> <chr> <chr> <chr> <chr> <int> <int>
#> 1 01_hello 07b3eece-65d8… 05_Feb_202… stderr ../../s… 3 0
#> 2 01_hello 07b3eece-65d8… 05_Feb_202… stdout ../../s… 20 0
#> 3 01_hello 34da9fa1-5e3b… 13_Feb_202… stderr ../../s… 3 0
#> 4 01_hello 34da9fa1-5e3b… 13_Feb_202… stdout ../../s… 20 0
#> 5 01_hello 9128a3d1-e722… 09_Feb_202… stderr ../../s… 3 0
#> 6 01_hello 9128a3d1-e722… 09_Feb_202… stdout ../../s… 20 0
#> 7 01_hello d1ea989c-4bde… 09_Feb_202… stderr ../../s… 3 0
#> 8 01_hello d1ea989c-4bde… 09_Feb_202… stdout ../../s… 20 0
#> 9 06_tabsets 30c5e8cf-9c16… 13_Feb_202… stderr ../../s… 3 0
#> 10 06_tabsets 30c5e8cf-9c16… 13_Feb_202… stdout ../../s… 20 0
#> # ℹ 20 more rows
#> # ℹ 3 more variables: numWarningLines <int>, numFatalLines <int>,
#> # numInfoLines <int>
#>
#> $summary
#> # A tibble: 15 × 9
#> specId proxyId startupTime stdout_lines stderr_lines total_error_lines
#> <chr> <chr> <chr> <int> <int> <int>
#> 1 01_hello 07b3ee… 05_Feb_202… 20 3 0
#> 2 01_hello 34da9f… 13_Feb_202… 20 3 0
#> 3 01_hello 9128a3… 09_Feb_202… 20 3 0
#> 4 01_hello d1ea98… 09_Feb_202… 20 3 0
#> 5 06_tabsets 30c5e8… 13_Feb_202… 20 3 0
#> 6 06_tabsets f80074… 05_Feb_202… 20 3 0
#> 7 crash_simula… 0801f3… 05_Feb_202… 20 4 0
#> 8 crash_simula… 10e989… 05_Feb_202… 20 3 0
#> 9 crash_simula… 206d99… 05_Feb_202… 20 9 2
#> 10 crash_simula… 278b89… 13_Feb_202… 20 11 2
#> 11 crash_simula… 2b58f9… 09_Feb_202… 20 3 0
#> 12 crash_simula… 34e115… 05_Feb_202… 20 4 0
#> 13 crash_simula… 43c8bf… 05_Feb_202… 20 8 2
#> 14 crash_simula… e0399e… 05_Feb_202… 20 7 0
#> 15 crash_simula… e65af8… 05_Feb_202… 20 3 0
#> # ℹ 3 more variables: total_warning_lines <int>, total_fatal_lines <int>,
#> # total_info_lines <int>