A system and resource monitoring tool written in Golang!

Overview

Grofer

pesos

A clean and modern system and resource monitor written purely in golang using termui and gopsutil!

Currently compatible with Linux only.

Currently compatible with Linux only.

Installation

Using go get:

go get -u github.com/pesos/grofer

As an executable:

curl -sSL https://github.com/pesos/grofer/releases/download//grofer_ --output grofer
chmod +x grofer

architecture: underlying system architecture on which grofer will be run

  • grofer_386
  • grofer_amd64
  • grofer_arm
  • grofer_arm64

For system wide usage, install grofer to a location on $PATH, e.g. /usr/local/bin

mv grofer /usr/local/bin

Building from source:

git clone https://github.com/pesos/grofer
cd grofer
go build grofer.go

Shell Completions

grofer includes a subcommand to generate shell completion scripts to get autocompletion for subcommands and flags

Bash

To get completions for current session only,

source <(grofer completion bash)

To load completions for each session, the generated script must be moved to the completions directory. Take a look at the third question here to find out the right place to put the script

Zsh

If shell completion is not already enabled in your environment you will need to enable it. You can execute the following once:

echo "autoload -U compinit; compinit" >> ~/.zshrc

To load completions for each session, the generated script must be placed in a directory in your fpath. For a quick-and-dirty solution, run once:

grofer completion zsh > "${fpath[1]}/_grofer"

You will need to start a new shell for this setup to take effect.

Fish

To get completions for current session only,

grofer completion fish | source

To load completions for each session, the generated script must be moved to the completions directory

grofer completion fish > ~/.config/fish/completions/grofer.fish

Usage

grofer is a system and resource monitor written in golang.

While using a TUI based command, press ? to get information about key bindings (if any) for that command.

Usage:
  grofer [flags]
  grofer [command]

Available Commands:
  about       about is a command that gives information about the project in a cute way
  completion  Generate completion script
  export      Used to export profiled data.
  help        Help about any command
  proc        proc command is used to get per-process information

Flags:
      --config string   config file (default is $HOME/.grofer.yaml)
  -c, --cpuinfo         Info about the CPU Load over all CPUs
  -h, --help            help for grofer
  -r, --refresh uint    Overall stats UI refreshes rate in milliseconds greater than 1000 (default 1000)
  -t, --toggle          Help message for toggle

Use "grofer [command] --help" for more information about a command.


Examples

grofer [-r refreshRate] [-c]

This gives overall utilization stats refreshed every refreshRate milliseconds. Default and minimum value of the refresh rate is 1000 ms.

grofer

Information provided:

  • CPU utilization per core
  • Memory (RAM) usage
  • Network usage
  • Disk storage

The -c, --cpuinfo flag displays finer details about the CPU load such as percentage of the time spent servicing software interrupts, hardware interrupts, etc.

grofer-cpu

Information provided:

  • Usr : % of time spent executing user level applications.
  • Sys : % of time spent executing kernel level processes.
  • Irq : % of time spent servicing hardware interrupts.
  • Idle : % of time CPU was idle.
  • Nice : % of time spent by CPU executing user level processes with a nice priority.
  • Iowait: % of time spent by CPU waiting for an outstanding disk I/O.
  • Soft : % of time spent by the CPU servicing software interrupts.
  • Steal : % of time spent in involuntary waiting by logical CPUs.

grofer proc [-p PID] [-r refreshRate]

If the -r flag is specified then the UI will refresh and display new information every refreshRate milliseconds. The minimum and default value for refreshRate is 1000 ms.

grofer proc

This lists all running processes and relevant information.

grofer-proc


grofer proc -p PID

This gives information specific to a process, specified by a valid PID.

Passing a PID of 0 will list all the processes instead (same as grofer proc).

grofer-proc-pid

Information provided:

  • CPU utilization %

  • Memory utilization %

  • Child processes

  • Number of voluntary and involuntary context switches

  • Memory usage (RSS, Data, Stack, Swap)

grofer export [-i Iterations] [-f File] [-r refreshRate] [-t type] [-p PID]

This allows exporting of profiled data either of system usage or data particular to that of a process. Data format is JSON by default, but XML support exists too!

The flags are explained as follows:

  • -i, --iter: Number of iterations to profile for.

  • -f, --filename: Name of output file (exported data).

  • -r, --refresh: Refresh rate, time interval between iterations (in milliseconds).

  • -t, --type: Specify the output data format (JSON by default). Types supported are:

    • JSON: Specifically, LJSON, where each line consists of one JSON object which contain nested fields and values.
  • -p, --pid: Specify PID of process to profile.

Issues
  • Press F to kill

    Press F to kill

    Description

    Added two keybindings to kill the selected process in grofer proc:

    • K (shift+K)
    • <F9> - because htop uses this keybind

    Fixes #16

    Type of change

    Please delete options that are not relevant.

    • [x] New feature (non-breaking change which adds functionality)

    Checklist:

    • [x] I have read the contribution guidelines and followed it as far as possible.
    • [x] I have performed a self-review of my own code (if applicable)
    • [x] I have commented my code, particularly in hard-to-understand areas (if applicable)
    • [x] I have run go fmt on my code (reference)
    • [x] My changes generate no new warnings
    • [x] Any dependent and pending changes have been merged and published
    hacktoberfest-accepted 
    opened by Samyak2 47
  • `grofer` UI changes

    `grofer` UI changes

    Description

    Building custom termui widgets and redesigning the main page to look more colorful. Needs more work to support image

    Also added temperature sensor tracking. Needs more testing. Causes crashing on Windows. (Above image doesn't show anything)

    Type of change

    Please delete options that are not relevant.

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [X] New feature (non-breaking change which adds functionality)
    • [X] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [ ] This change requires a documentation update

    Checklist:

    • [X] I have read the contribution guidelines and followed it as far as possible.
    • [ ] I have performed a self-review of my own code (if applicable)
    • [ ] I have commented my code, particularly in hard-to-understand areas (if applicable)
    • [ ] I have run go fmt on my code (reference)
    • [ ] I have made corresponding changes to the documentation (if applicable)
    • [ ] My changes generate no new warnings
    • [ ] Any dependent and pending changes have been merged and published
    opened by panzerox123 37
  • [FEATURE REQ] Add version number to about page

    [FEATURE REQ] Add version number to about page

    Is your feature request related to a problem? Please describe. Currently, grofer about just has some text. It should additionally have version numbers too for each version built.

    Describe the solution you'd like Adding version number to about. :P

    enhancement good first issue help wanted priority: medium beginner-friendly 
    opened by Gituser143 31
  • Add Dockerfile

    Add Dockerfile

    Description

    ~~It isn't working yet, do not merge pls~~ It works now!

    Fixes #101

    • Added a Dockerfile based on the golang image
    • ~~grofer is installed using go get (not from local source, I think?)~~ grofer is installed using the local current directory.
    • HOST_PROC, HOST_SYS, etc. is set for gopsutil
    • The whole root directory of the host has to be mounted as read only for this to work. A few other docker flags are also required.
    • See updated README for instructions

    ~~What does not work:~~

    ~~grofer just freezes on launch, while taking 100% CPU. It has to be stopped using docker stop (ctrl-c does not work). Only --help, about seem to work (proc freezes too). I tried setting HOST_SYS, etc. the issue still exists. I'm opening this draft PR to see if we can fix this.~~

    Type of change

    • [x] New feature (non-breaking change which adds functionality)
    • [x] This change requires a documentation update

    Checklist:

    • [x] I have read the contribution guidelines and followed it as far as possible.
    • [x] I have performed a self-review of my own code (if applicable)
    • [x] I have commented my code, particularly in hard-to-understand areas (if applicable)
    • [x] I have run go fmt on my code (reference)
    • [x] I have made corresponding changes to the documentation (if applicable)
    • [x] My changes generate no new warnings
    • [x] Any dependent and pending changes have been merged and published
    opened by Samyak2 30
  • Allow sending various signals to processes

    Allow sending various signals to processes

    Description

    This PR aims to integrate sending of various signals to processes from the grofer proc subcommand. Currently, the command only allows killing of a process. The scope of this PR include -

    • [x] Replacing Kill with SendSignal
    • [x] Submenu to choose a signal to send to the selected process
    • [x] Keybinding to launch submenu

    Fixes #79, #80

    Type of change

    Please delete options that are not relevant.

    • [x] New feature (non-breaking change which adds functionality)
    • [x] This change requires a documentation update

    Checklist:

    • [x] I have read the contribution guidelines and followed it as far as possible.
    • [x] I have performed a self-review of my own code (if applicable)
    • [x] I have commented my code, particularly in hard-to-understand areas (if applicable)
    • [x] I have run go fmt on my code (reference)
    • [ ] I have made corresponding changes to the documentation (if applicable)
    • [x] My changes generate no new warnings
    • [x] Any dependent and pending changes have been merged and published
    opened by anihm136 28
  • [FEATURE REQ] add functionality for getting help for a particular command

    [FEATURE REQ] add functionality for getting help for a particular command

    Is your feature request related to a problem? Please describe. When running a particular interactive command like grofer or grofer proc it would be nice to have a way to get something like a table of available key bindings and what they do for that command.

    Describe the solution you'd like Pressing a key like h should pause the UI rendering and display a table of the available key bindings for that command and what they do like to scroll, k to kill a process in the grofer proc command once #16 is done etc.

    enhancement priority: medium hacktoberfest 
    opened by MadhavJivrajani 21
  • Add JSON export functionality

    Add JSON export functionality

    Description

    Added export functionality to export monitor/profile in line JSON format.

    Type of change

    Please delete options that are not relevant.

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
    • [x] This change requires a documentation update

    Checklist:

    • [x] I have read the contribution guidelines and followed it as far as possible.
    • [x] I have performed a self-review of my own code (if applicable)
    • [x] I have commented my code, particularly in hard-to-understand areas (if applicable)
    • [x] I have run go fmt on my code (reference)
    • [x] I have made corresponding changes to the documentation (if applicable)
    • [x] My changes generate no new warnings
    • [x] Any dependent and pending changes have been merged and published
    opened by Gituser143 20
  • Add Container metric functionality

    Add Container metric functionality

    Description

    Add functionality to get overview of containers running by docker and related metrics. Can be accessed using grofer container.

    Fixes #91

    Type of change

    Please delete options that are not relevant.

    • [x] New feature (non-breaking change which adds functionality)
    • [x] This change requires a documentation update

    Checklist:

    • [x] I have read the contribution guidelines and followed it as far as possible.
    • [x] I have performed a self-review of my own code (if applicable)
    • [x] I have commented my code, particularly in hard-to-understand areas (if applicable)
    • [x] I have run go fmt on my code (reference)
    • [ ] I have made corresponding changes to the documentation (if applicable)
    • [x] My changes generate no new warnings
    • [x] Any dependent and pending changes have been merged and published
    opened by Gituser143 19
  • Remove `mpstat` as a dependency for the CPU Info page

    Remove `mpstat` as a dependency for the CPU Info page

    Description

    Fixes #97

    1. Read /proc/stat to obtain CPU load information instead of relying on mpstat. No more dependency related errors on systems that don't have mpstat installed by default.

    2. Updated CONTRIBUTING.MD to say main instead of master branch.

    Let me know if there are any changes you would like :D

    Type of change

    Please delete options that are not relevant.

    • [X] Bug fix (non-breaking change which fixes an issue)

    Checklist:

    • [X] I have read the contribution guidelines and followed it as far as possible.
    • [X] I have performed a self-review of my own code (if applicable)
    • [X] I have commented my code, particularly in hard-to-understand areas (if applicable)
    • [X] I have run go fmt on my code (reference)
    • [ ] I have made corresponding changes to the documentation (if applicable)
    • [X] My changes generate no new warnings
    • [ ] Any dependent and pending changes have been merged and published
    opened by panzerox123 16
  • Add Dockerfile pt. 2

    Add Dockerfile pt. 2

    Description

    Fixes #101

    Based on #106

    • Added a Dockerfile based on the golang image
    • grofer is installed using go install from the local source
    • The whole root directory of the host has to be mounted as read only for this to work. A few other docker flags are also required.
      • the docker socket is also mounted
    • See updated README for instructions
    • HOST_PROC, HOST_SYS, etc. is set for gopsutil

    Type of change

    Please delete options that are not relevant.

    • [x] New feature (non-breaking change which adds functionality)
    • [x] This change requires a documentation update

    Checklist:

    • [x] I have read the contribution guidelines and followed it as far as possible.
    • [x] I have performed a self-review of my own code (if applicable)
    • [x] I have commented my code, particularly in hard-to-understand areas (if applicable)
    • [x] I have run go fmt on my code (reference)
    • [x] I have made corresponding changes to the documentation (if applicable)
    • [x] My changes generate no new warnings
    • [x] Any dependent and pending changes have been merged and published

    TODO

    • fix GitHub workflow to publish container
    opened by Samyak2 14
  • [FEATURE REQ] Kubernetes Monitoring and Dashboard

    [FEATURE REQ] Kubernetes Monitoring and Dashboard

    Is your feature request related to a problem? Please describe. Kubernetes Monitoring and Dashboarding

    Describe the solution you'd like I believe a lot of the existing architecture of Grofer can be re-used to show data relevant to Kubernetes. A simple dashboard can be implemented, with support for features including (but not limited to) 0. Listing all available pods, nodes, and similar data sources made available by the Kubernetes API

    1. Pod-Specific Actions on keypress (a la grofer proc)
    2. Charts for available metrics
    3. In-Memory time-series storage of data collected (could perhaps make use of some of the existing capabilities of the export feature)

    Describe alternatives you've considered if any The tool of choice for this appears to be k9s, but I believe the learning outcome of implementing this here would be worth the effort.

    Additional context None.

    I would love to work on this feature if it's approved! Thank you for the time.

    enhancement 
    opened by anirudhRowjee 0
  • [FEATURE REQ] A screen that can track battery usage

    [FEATURE REQ] A screen that can track battery usage

    I find myself looking at battery information quite frequently. It would be nice to have a screen that can read files in /sys/class/power_supply and display the information, along with a chart that could detect spikes in power usage. image These are some of the files that TLP uses to keep track of battery information on my system. It's safe to assume not every system generates the same set of files, such cases need to be addressed as well

    enhancement 
    opened by panzerox123 0
  • [BUG] Selectoed process out of bounds in `grofer proc`

    [BUG] Selectoed process out of bounds in `grofer proc`

    Describe the bug When the process list changes for any reason and is refreshed, if the number of processes in the refreshed list is less than the index of the currently selected process, the selection goes out of bounds and no process is selected

    To Reproduce Steps to reproduce the behavior:

    1. grofer proc
    2. Scroll down to the last process
    3. Wait for a while (or kill a process if you're impatient)
    4. No process is selected

    Expected behavior If the selection goes out of bounds, cursor should reset to the last element in the new list

    Screenshots image Before termination of last process image After termination of last process

    Desktop (please complete the following information):

    • OS: Linux 5.12.7-arch1-1
    • Go Version: 1.16.4 linux/amd64

    Additional context Seems generally harmless for now, does not cause any crashes. Using any of the navigation keys from this state resets the selection to a valid position. However, this caused some issues on #112 for which a temporary fix has been made. Updating the selection using calcPos after every process refresh seems to fix the problem, but has not been tested for adverse behaviors or side effects

    bug 
    opened by anihm136 0
  • [FEATURE REQ] Add keybind to navigate to child process in grofer proc

    [FEATURE REQ] Add keybind to navigate to child process in grofer proc

    Is your feature request related to a problem? Please describe. While running grofer proc with a pid with say a few child processes, there is no way to navigate to a child process directly, The only way to do that would be to note down the PID and run grofer proc with noted PID

    Describe the solution you'd like Some sort of keybinding (like Ctrl-Enter) to directly jump to that child process would be nice

    Additional context Suggestions on what keybind to use are appreciated

    enhancement priority: medium feature discussion 
    opened by lucasace 3
  • [DOC] document using `grofer export` format

    [DOC] document using `grofer export` format

    • The format in which metrics are exported by grofer export resembles the ndjson format.
      • This is done for ease of appending json objects to a file without having to buffer large json strings in memory.
      • It also makes it easier to read the file in efficient ways such as by maybe lazy loading using generators in python.
    • It'd be helpful to have this mentioned in greater detail in the README and also maybe have a few examples that make use of these metrics that are exported as ndjson showing how such files can be worked with.

    Getting metrics

    grofer export -p <valid PID> -f export.json
    
    enhancement good first issue help wanted priority: medium 
    opened by MadhavJivrajani 1
  • [Enhancement] add cleaner and more efficient error handling

    [Enhancement] add cleaner and more efficient error handling

    Currenltly, error handling is done in the usual pattern of

    err := something()
    if err != nil {
        return err // propagate err up the function call chain
    }
    

    However, this might not be the most robust and efficient way to do this as mentioned in this super interesting talk.

    The main take away from this are that the current versions of Go pass return values around in memory rather than in registers as done by languages like C++. An excellent reference for the same can be found here. Therefore, doing error handling in the above mentioned form may not prove to be as efficient as one might like.

    Some discussion might be required in terms of what approaches to use and if we should introduce external dependencies to handle the same, before proceeding with this issue in. Discussion can take place on the Discussions tab.

    enhancement priority: medium discussion 
    opened by MadhavJivrajani 1
  • [FEATURE REQ] in-terminal dashboard for load/stress testing

    [FEATURE REQ] in-terminal dashboard for load/stress testing

    Is your feature request related to a problem? Please describe. It would be super cool and helpful if grofer could provide an in-terminal real-time display of different metrics evaluated during load/stress testing.

    Describe the solution you'd like Using some load-testing tool like vegeta the output generated using the tool can be piped to grofer, something like: vegeta ... | grofer api, not too sure, would love to discuss specifics and feasibility.

    feature discussion 
    opened by MadhavJivrajani 0
  • [FEATURE REQ] provide a time period to run `export` command for

    [FEATURE REQ] provide a time period to run `export` command for

    Is your feature request related to a problem? Please describe. Along with providing an option for a number of iterations to run for at a specific refresh rate, it would be helpful to provide a total run time and a refresh rate at which this should happen.

    Describe the solution you'd like grofer export -t 120 -r 500 Total time period -t can be added as a non-persistent flag and units would be in seconds.

    If the -t flag is used then the parameter for iteration should be explicitly calculated using total time and refresh rate.

    This is done with the assumption that data fetch is almost instantaneous in nature which is a non-realistic yet reasonable assumption to make imo.

    To be worked on after #34

    Development for export feature is being done on the export branch (link)

    priority: medium feature hacktoberfest 
    opened by MadhavJivrajani 0
  • [FEATURE REQ] add stats not provided by the `gopsutil` library

    [FEATURE REQ] add stats not provided by the `gopsutil` library

    Is your feature request related to a problem? Please describe. The gopsutil library does not provide APIs for getting information about certain system parameters and metrics which might be important to know in certain cases such as the the scheduling policy of a process or information about software interrupts, hardware interrupts, etc as requested in #21

    Describe the solution you'd like For interrupt information /proc/interrupts would need to be parsed and /proc/PID/sched would need to be parsed for information such as the scheduling policy for the process.

    This feature can be added as part of the export feature currently being worked upon.

    help wanted priority: high feature 
    opened by MadhavJivrajani 0
  • Grofer not supported on MacOS and Windows

    Grofer not supported on MacOS and Windows

    Describe the bug The individual process stats feature of grofer does not work on MacOS.

    To Reproduce Steps to reproduce the behaviour: Run ./grofer proc -p <pid> as usual on a system running MacOS/Windows.

    Expected Behaviour Grofer should display process stats for the given PID like in Linux.

    Actual Behaviour On MacOS:
    A runtime error with a segmentation violation.
    The prompt in Terminal also does not function as usual after this,

    Desktop (please complete the following information):

    • MacOS/Windows
    • Go Version 1.14
    bug priority: high 
    opened by metonymic-smokey 5
Releases(v1.4.0)
Owner
PES Open Source Community
PES Open Source Community
Monitor your network and internet speed with Docker & Prometheus

Stand-up a Docker Prometheus stack containing Prometheus, Grafana with blackbox-exporter, and speedtest-exporter to collect and graph home Internet reliability and throughput.

Jeff Geerling 1.1k Sep 8, 2021
Simple and extensible monitoring agent / library for Kubernetes: https://gravitational.com/blog/monitoring_kubernetes_satellite/

Satellite Satellite is an agent written in Go for collecting health information in a kubernetes cluster. It is both a library and an application. As a

Teleport 188 Aug 9, 2021
A flexible process data collection, metrics, monitoring, instrumentation, and tracing client library for Go

Package monkit is a flexible code instrumenting and data collection library. See documentation at https://godoc.org/gopkg.in/spacemonkeygo/monkit.v3 S

Space Monkey Go 449 Jul 23, 2021
A system and resource monitoring tool written in Golang!

Grofer A clean and modern system and resource monitor written purely in golang using termui and gopsutil! Currently compatible with Linux only. Curren

PES Open Source Community 164 Sep 15, 2021
System resource usage profiler tool which regularly takes snapshots of the memory and CPU load of one or more running processes so as to dynamically build up a profile of their usage of system resources.

Vegeta is a system resource usage tracking tool built to regularly take snapshots of the memory and CPU load of one or more running processes, so as to dynamically build up a profile of their usage of system resources.

Kartik 7 Sep 9, 2021
checkah is an agentless SSH system monitoring and alerting tool.

CHECKAH checkah is an agentless SSH system monitoring and alerting tool. Features: agentless check over SSH (password, keyfile, agent) config file bas

deadc0de 4 Sep 7, 2021
Go Library [DEPRECATED]

Tideland Go Library Description The Tideland Go Library contains a larger set of useful Google Go packages for different purposes. ATTENTION: The cell

Tideland 193 Jul 30, 2021
The Prometheus monitoring system and time series database.

Prometheus Visit prometheus.io for the full documentation, examples and guides. Prometheus, a Cloud Native Computing Foundation project, is a systems

Prometheus 38.7k Sep 10, 2021
A Postgres Metrics Dashboard

#Pome Pome stands for Postgres Metrics. Pome is a PostgreSQL Metrics Dashboard to keep track of the health of your database. This project is at a very

Rachid Belaid 1.1k Aug 14, 2021
AKS compliance validation pack for Probr

Probr AKS Service Pack The Probr AKS Service pack compliments the Kubernetes service pack with Azure Kubernetes Service (AKS)-specific compliance chec

null 15 Sep 9, 2021
rtop is an interactive, remote system monitoring tool based on SSH

rtop rtop is a remote system monitor. It connects over SSH to a remote system and displays vital system metrics (CPU, disk, memory, network). No speci

RapidLoop 1.9k Sep 8, 2021
distributed monitoring system

OWL OWL 是由国内领先的第三方数据智能服务商 TalkingData 开源的一款企业级分布式监控告警系统,目前由 Tech Operation Team 持续开发更新维护。 OWL 后台组件全部使用 Go 语言开发,Go 语言是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回

null 802 Aug 11, 2021
Ping monitoring engine used in https://ping.gg

Disclaimer: If you are new to Go this is not a good place to learn best practices, the code is not very idiomatic and there's probably a few bad ideas

null 406 Sep 9, 2021
Very powerful server agent for collecting & sending logs & metrics with an easy-to-use web console.

logkit-community 中文版 Introduce Very powerful server agent for collecting & sending logs & metrics with an easy-to-use web console. logkit-community De

Qiniu Cloud 1.1k Sep 8, 2021
Distributed simple and robust release management and monitoring system.

Agente Distributed simple and robust release management and monitoring system. **This project on going work. Road map Core system First worker agent M

StreetByters Community 30 Jul 19, 2021
Open source framework for processing, monitoring, and alerting on time series data

Kapacitor Open source framework for processing, monitoring, and alerting on time series data Installation Kapacitor has two binaries: kapacitor – a CL

InfluxData 2.1k Sep 4, 2021
CNCF Jaeger, a Distributed Tracing Platform

Jaeger - a Distributed Tracing System Jaeger, inspired by Dapper and OpenZipkin, is a distributed tracing platform created by Uber Technologies and do

Jaeger - Distributed Tracing Platform 14.2k Sep 11, 2021
The open telemetry framework

DISCONTINUATION OF PROJECT This project will no longer be maintained by Intel. Intel will not provide or guarantee development of or support for this

Intel SDI 1.8k Sep 2, 2021
A GNU/Linux monitoring and profiling tool focused on single processes.

Uroboros is a GNU/Linux monitoring tool focused on single processes. While utilities like top, ps and htop provide great overall details, they often l

Simone Margaritelli 527 Aug 23, 2021