Skip to content

Boop hachyderm! πŸ‘‰πŸ˜

License

Apache-2.0, Unknown licenses found

Licenses found

Apache-2.0
LICENSE
Unknown
LICENSE.go-nova
Notifications You must be signed in to change notification settings

hachyderm/hachyboop

Repository files navigation

Hachyboop! πŸ‘‰πŸ˜

Testing utility to poke hachyderm.io from various angles. Writes data to parquet for later bulk analysis.

Overview

Hachyboop performs the following types of tests:

  • DNS checks - how does DNS resolve for hachyderm.io, a geographically-dependent A/AAAA record?
  • (coming one day) HTTP checks - how does hachyderm.io respond and perform for basic connection checks?
  • (coming another day, not pictured) Websocket checks - how does the streaming portion of Mastodon perform?
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                                                           
β”‚                 β”‚                                                                                           
β”‚  Hachyderm.io   β”‚                                                                                           
β”‚  Authoritative  │◄─────┐        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  DNS Server     β”‚      β”‚        β”‚                                   β”‚       β”‚                              β”‚
β”‚                 β”‚      β”‚        β”‚  Agent Node                       β”‚       β”‚  Hachyderm Cloud             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚        β”‚                                   β”‚       β”‚                              β”‚
                    DNS  β”‚        β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                 β”‚       β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
                    boop β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€             β”‚  write results  β”‚       β”‚  β”‚                        β”‚  β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚        β”‚   β”‚  Hachyboop  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β–Ίβ”‚  Hachyderm S3 Storage  β”‚  β”‚
β”‚                 β”‚      β”‚  β”Œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€             β”‚         β”‚       β”‚       β”‚  β”‚                        β”‚  β”‚
β”‚  Hachyderm.io   β”‚      β”‚  β”‚     β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚       β”‚       β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚  DNS Migration  β”‚β—„β”€β”€β”€β”€β”€β”˜  β”‚     β”‚                           β”‚       β”‚       β”‚              β–²               β”‚
β”‚  Target Server  β”‚         β”‚     β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚       β”‚       β”‚              β”‚               β”‚
β”‚                 β”‚         β”‚     β”‚   β”‚                 β”‚     β”‚       β”‚       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚     β”‚   β”‚  Local Parquet  β”‚β—„β”€β”€β”€β”€β”˜       β”‚                      β”‚                
                            β”‚     β”‚   β”‚                 β”‚             β”‚              analyze β”‚                
                            β”‚     β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚              (duckdb)β”‚                
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚     β”‚                                   β”‚                      β”‚                
β”‚                 β”‚    HTTP β”‚     β”‚                                   β”‚          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   
β”‚                 β”‚    boop β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚                        β”‚   
β”‚  Hachyderm.io   β”‚β—„β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                    β”‚  Hachyderm Infra Team  β”‚   
β”‚                 β”‚                                                              β”‚                        β”‚   
β”‚                 β”‚                                                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                                                           

Important

Hachyboop DOES NOT and WILL NEVER collect any personal data or machine data beyond the data you explicitly provide us, the answers to DNS queries, and performance data related to the tests. By default, Hachyboop does not write results to Hachyderm S3 Storage.

Configuration

Hachyboop provides several environment variables to configure how it behaves. If you use direnv, you can copy the .envrc.example, rename it to .envrc, then fill it with your values.

##################################################
# Hachyboop Common Environment Variables
##################################################

## Metadata

### Identifying metadata - helps us understand who you are (anonymized OK) and where you're coming from (broadly)
export HACHYBOOP_OBSERVER_ID=esk  # unique (or not) identifier for you. recommendation is you provide a pseudonym or generated unique ID.
export HACHYBOOP_OBSERVER_REGION=exandria  # see below, region code that most closely matches where you are

## Testing parameters

### Frequency

export HACHYBOOP_TEST_FREQUENCY_SECONDS=300 # how often should we run our rtest?

### DNS Configuration

#### Resolvers and questions - what DNS entries are you poking, and who are you asking?
export HACHYBOOP_RESOLVERS=91.200.176.1:53,8.8.8.8:53  # comma-separated, requires port number, e.g. 8.8.8.8:53
export HACHYBOOP_QUESTIONS=hachyderm.io  # which records do you want to test

## Writers

### S3 writer - writes parquet to the specified S3 bucket
export HACHYBOOP_S3_WRITER_ENABLED=true  # should we write to S3?
export HACHYBOOP_S3_ENDPOINT=fsn1.your-objectstorage.net  # S3 endpoint
export HACHYBOOP_S3_BUCKET=bag-of-holding  # S3 bucket name
export HACHYBOOP_S3_PATH=some-stuff/some-subfolder # what path to write to on S3
export HACHYBOOP_S3_ACCESS_KEY_ID=AKIAEXAMPLE  # access key
export HACHYBOOP_S3_SECRET_ACCESS_KEY=secret  # secret

### Local file writer - writes parquet to a local file on disk
export HACHYBOOP_LOCAL_WRITER_ENABLED=true  # should we write to the local disk
export HACHYBOOP_LOCAL_RESULTS_PATH=data  # path to write to, relative to where hachyboop is running

HACHYBOOP_OBSERVER_REGION values

When choosing a value, choose the value that most closely matches how you would describe your location.

  • North America
    • namer-east
    • namer-central
    • namer-west
  • South America
    • samer-east
    • samer-west
  • Europe
    • eu-east
    • eu-central
    • eu-west
  • Africa
    • africa-north
    • africa-south
  • Middle East
    • me
  • Asia
    • ap-south
    • ap-southeast
    • ap-southwest
    • ap-north
    • ap-northeast
    • ap-northwest
    • china
    • japan
  • Australia
    • australia-east
    • australia-west

Runtime cloud detection

Hachyboop can detect some clouds based on metadata available to it. It will detect:

  • Bunny.net Magic Containers - if BUNNYNET_MC_PODIP is present in the environment it will set (and override):
    • HACHYBOOP_OBSERVER_ID = BUNNYNET_MC_APPID / BUNNYNET_MC_PODIP
    • HACHYBOOP_OBSERVER_REGION = BUNNYNET_MC_REGION / BUNNYNET_MC_ZONE

Example of collected data

Important

Repeating this, because it's important. Hachyboop DOES NOT and WILL NEVER collect any personal data or machine data beyond the data you explicitly provide us, the answers to DNS queries, and performance data related to the tests. By default, Hachyboop does not write results to Hachyderm S3 Storage.

Here's a screenshot of the data we collect with hachyboop. The observedby and observationregion fields were supplied via the HACHYBOOP_* environment variables above.

image