Bonum Certa Men Certa

Using a Single-Board Computer to Monitor IPFS

IPFS lights-based monitoring on self-hosted SBC
IPFS lights-based monitoring on self-hosted SBC (blue is for status, green and red for upstream and downstream payloads)



Summary: IPFS is light and simple enough to run from one's home, even on a low-voltage machine, and the code below can be used as a baseline for monitoring IPFS activity 24/7




#!/usr/bin/python3
# 2019-04-22
# 2020-11-07



from blinkt import set_pixel, show from random import randint,random,shuffle,randrange from time import sleep import argparse import signal

def solid(r,g,b,s): while True: for pixel in range(8): set_pixel(pixel, r, g, b) show() sleep(0.1)

def random_lights3(): while True: for pixel in range(8): r = randint(0, 255) g = randint(0, 255) b = randint(0, 255) set_pixel(pixel, r, g, b) show() sleep(0.1)

def random_lights2(): while True: p=range(8) p=sorted(p, key=lambda x: random()) for pixel in p: r = randrange(0, 255, 16) g = randrange(0, 255, 16) b = randrange(0, 255, 16) set_pixel(pixel, r, g, b) show() sleep(0.1)

def random_lights1(): while True: p=range(8) p=sorted(p, key=lambda x: random()) for pixel in p: r = randrange(0, 255, 8) g = randrange(0, 255, 8) b = randrange(0, 255, 8) set_pixel(pixel, r, g, b) show() sleep(0.1)

def spacer(r,g,b,seconds): while True: for pixel in range(8): set_pixel(pixel, r, g, b) next = (pixel+1)%8 set_pixel(next, 0, 0, 0) show() sleep(seconds)

def reversed_spacer(r,g,b,seconds): while True: for pixel in reversed(range(8)): set_pixel(pixel, r, g, b) prev = (pixel-1)%8 set_pixel(prev, 0, 0, 0) show() sleep(seconds)

def cylon(r,g,b,seconds): while True: for pixel in reversed(range(8)): set_pixel(pixel, r, g, b) prev = (pixel-1)%8 if prev < pixel: set_pixel(prev, 0, 0, 0) show() sleep(seconds) for pixel in range(8): set_pixel(pixel, r, g, b) next = (pixel+1)%8 if next > pixel: set_pixel(next, 0, 0, 0) show() sleep(seconds)

def pulsed_bar(r,g,b,seconds): steps=8 while True: for fade in reversed(range(steps)): r2=r*(fade+1)/steps g2=g*(fade+1)/steps b2=b*(fade+1)/steps # print (fade) for pixel in range(8): set_pixel(pixel, r2, g2, b2)

show() sleep(seconds) for fade in range(int(steps/1)): r2=r*(fade+1)/steps g2=g*(fade+1)/steps b2=b*(fade+1)/steps for pixel in range(8): set_pixel(pixel, r2, g2, b2)

show() sleep(seconds*0.5)

def ipfs(r,g,b,seconds): steps=4 # how many stages in gradient brightness=0.5 # how bright the lights will get bluebright=100 # the brightness of the blue light in the middle (0-255), albeit overriden by input dim=1 # increase to dim down the lights run = 0 # running count for periodic file access while True: # run always (until interruption) run=run+1 # first, open from files the required values, which change over time if (int(run) % 50 == 1): with open(r'~/RateIn', 'r') as f: # open from file the IN value # print(r) lines = f.read().splitlines() r=int(lines[-1]) # read the value # r=int(map(int, f.readline().split())) # prototype, for multiples (stale)

with open(r'~/RateOut', 'r') as f: # open from file OUT value # print(g) # show values, debugging lines = f.read().splitlines() g=int(lines[-1])

with open(r'~/Swarm', 'r') as f: # open from file Swarm value # print(g) # show values, debugging lines = f.read().splitlines() bluebright=int(lines[-1])/2 # print(bluebright)

for fade in reversed(range(steps)): # fade in effect # print(g2) # show values again, debugging # print(r2) r2=r*(fade+1)/steps/dim g2=g*(fade+1)/steps/dim b2=b*(fade+1)/steps/dim

# print(g2) # show values again, debugging # print(r2)

# print (fade) for pixel in range(3): # first 3 LED lights set_pixel(pixel, r2/20, (g2*brightness)+(pixel*1), b2/20)

for pixel in range(5,8): # the other/last 3 lights set_pixel(pixel, (r2*brightness)+(pixel*1), g2/20, b2/20) if (bluebright==0): set_pixel(3, 255, 255, 255) set_pixel(4, 255, 255, 255) else: set_pixel(3, 0, 0, 0) set_pixel(4, 0, 0, bluebright)

show() sleep(seconds/r*r+0.1) for fade in range(int(steps/1)): # fade out effect r2=r*(fade+1)/steps/dim g2=g*(fade+1)/steps/dim b2=b*(fade+1)/steps/dim

for pixel in range(3): set_pixel(pixel, r2/20, (g2*brightness)+(pixel*1), b2/20)

for pixel in range(5,8): set_pixel(pixel, (r2*brightness)+(pixel*1), g2/20, b2/20) set_pixel(3, 0, 0, bluebright) set_pixel(4, 0, 0, 0) show() sleep(seconds/g*g+0.1)

def flashed_bar(r,g,b,seconds): while True: for half in range(4): set_pixel(half,r,g,b) for half in range(4,8): set_pixel(half,0,0,0) show() sleep(seconds) for half in range(4,8): set_pixel(half,r,g,b) for half in range(4): set_pixel(half,0,0,0) show() sleep(seconds)

def handler(signum, frame): print("\nSignal handler called with signal", signum) exit(0)

signal.signal(signal.SIGTERM, handler) signal.signal(signal.SIGINT, handler)

# read run-time options

parser = argparse.ArgumentParser(description="Drive 'blinkt' 8-pixel display.") parser.add_argument("pattern", help="name of light pattern: \ random[1-3], spacer, reversed_spacer, cylon, pulsed_bar, flashed_bar") parser.add_argument("r", metavar="r", type=int, help="red channel, 0-255") parser.add_argument("g", metavar="g", type=int, help="green channel, 0-255") parser.add_argument("b", metavar="b", type=int, help="blue channel, 0-255") parser.add_argument("timing", metavar="s", type=float, \ help="rate of binking in seconds") options = parser.parse_args()

pattern = options.pattern.lower() r = options.r g = options.g b = options.b s = options.timing

if pattern == "solid": solid(r,b,g,s) elif pattern == "random3": random_lights3() elif pattern == "random2": random_lights2() elif pattern == "random1" or pattern == "random": random_lights1() elif pattern == "spacer": spacer(r,g,b,s) elif pattern == "reversed_spacer": reversed_spacer(r,g,b,s) elif pattern == "cylon": cylon(r,g,b,s) elif pattern == "pulsed_bar": pulsed_bar(r,g,b,s) elif pattern == "ipfs": ipfs(r,g,b,s) elif pattern == "flashed_bar": flashed_bar(r,g,b,s) else: print("Unknown pattern") exit(1)

exit(0)





Example runtime: run-blinkt-ipfs.py ipfs 0 0 0 0.00

Based on or derived from baseline blinkt scripts; requires the hardware and accompanying libraries being installed on the system.

For the code to run properly in the above form, given that it takes input from files, the IPFS values need to be periodically written to disk/card, e.g. for every minute of the day:

* * * * * ipfs stats bw | grep RateIn | cut -d ' ' -f 2 | cut -d '.' -f 1 >> ~/RateIn * * * * * ipfs stats bw | grep RateOut | cut -d ' ' -f 2 | cut -d '.' -f 1 >> ~/RateOut * * * * * ipfs swarm peers | wc -l >> ~/Swarm

These lists of numbers can, in turn, also produce status reports to be shown in IRC channels. When our git repository becomes public it'll be included (AGPLv3).

Recent Techrights' Posts

Hard to Find a Job After Working for Microsoft (Back Doors Giant, Bribery Hub)
It generally looks like people who chose to serve Microsoft's agenda don't end up too well
Altering Perceived Reality to Make It Seem Like Microsoft is Thriving, Not Failing
pretend XBox did not die
Confluent Insiders: IBM Laid Off Over 800 at Confluent, Not Just 800
For the record, the layoffs at Confluent won't be over. After the bluewashing there will be "IBM RAs" impacting Confluent folks, aside from PIPs
Where and How to Spot LLM Slop
Many people correctly perceive LLMs as a site's downfall, a step towards the abyss
Links 25/03/2026: Nations Return to Russian Oil and Burning Wood
Links for the day
 
The World Wide Bots
The shape of the Web is so bad that bots exceed humans in some places
Links 26/03/2026: Solicitors Regulation Authority (SRA) Closes 101 Law Firms in 2 Years, "Please Compensate the Work You Appreciate"
Links for the day
Regaining Software Freedom Means Regaining Control Over Programs That Run on Our Devices
Richard Stallman will speak in Italy
Microsoft Secure Boot Removes Users' Choice
Has Greenland banned Microsoft and 'secure' boot yet?
IBM Pushes Workers Out, It Does Not Count Them as "Layoffs"
The number of IBM layoffs can be as large as tens of thousands per year
Microsoft Lost 31% Of Its Alleged "Value" in Five Months, Then It Got Downgraded
In 2026 Microsoft focuses on keeping the layoffs silent
SLAPP Censorship - Part 24 Out of 200: The Failed Effort by Brett Wilson LLP to Strike Out My Lawsuit and My Wife's Lawsuit Against Garrett (the Master Allowed Our Lawsuits to Proceed)
This is lawfare
Official New Figures Show That Solicitors Regulation Authority (SRA) Sees Rise in Dishonesty Among Law Firms Forcibly Shut Down ('Euthanised' Due to Misconduct)
It's rather if in our little country as many as 16 law firms were found to be so dishonest that they needed to be shut down
Back to Normalcy
In our datacentre at least
IBM is "Increasing Its Temporary and Part-time Headcount" While Net Headcount Falls (Despite Buying Many Companies and Their Workforce)
Headcount is a rather superficial yardstick.
EPO Union Decides to Continue Industrial Actions, Next Strike in Four Days
The latest strike had the highest participation rate
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Wednesday, March 25, 2026
IRC logs for Wednesday, March 25, 2026
Microsoft's "Silent Layoffs" in Slop Clothing
"AI-powered transformation" is just a euphemism for mass layoffs
Public Talk by Richard Stallman in Half a Day "at the Engineering and Architecture Campus of Cesena of the University of Bologna"
He'll probably attract a fairly large crowd
Gemini Links 26/03/2026: Buying a House, Stargazing, OFFLFIRSOCH 2026
Links for the day
Gemini Links 25/03/2026: Resisting Authoritarianism and Why Slop Needs to Go Away
Links for the day
Fedora Maintainer-ship Using Slop (Mistakes) Would Make Fedora Less Reliable
It won't produce reliable code or stable systems one can rely upon
IBM's "Legacy Employees" (Experienced Workers, IBM Management Dubs Them 'Dinobabies')
This notion of "legacy employees" seems like something overlapping with "expensive" (well paid) staff, even if not entirely equivalent
EPO's "Current Industrial Actions Are Likely to Intensify Further."
There is another strike in 5 days
This Morning The Register MS Published Slop Promotion With the Term "AI" 15 Times In It. The Register MS Was (As Usual) Paid to Do This
This is not a serious publisher
SLAPP Censorship - Part 23 Out of 200: We Were Right All Along (for 2 Years) About Third Party Funding and Willingness to 'Break the Bank' in Pursuit of "Revenge"
How much damage can a person do to oneself in pursuit of cover-up of legitimate technical concerns?
Gnome Foundation Inc is in Trouble
the agenda is set GAFAM and IBM rather than donors
Links 25/03/2026: Airports Further Militarised, "Slopification and Its Discontents", Microsoft 'Open' 'Hey Hi' Shutting Things Down
Links for the day
Gemini Links 25/03/2026: Blogging Fright and Absolutely Useless 'Apps' Made by Slop Machines
Links for the day
Rise in Energy Prices Will Significantly Accelerate the Death of So-called "AI Companies"
It should be noted that fake news about Microsoft OpenAI doubling workforce (mere words, not actions) can serve as a nice distraction from the death of Sora due to divestment
It's Always a Question of Trust
There's a widespread stigma of lawyers being manipulative and chronically dishonest
Solicitors Regulation Authority (SRA) Must More Carefully Investigate or Assess the Financial State of Law Firms in the UK
We'll cover this in depth in the future
GAFAM Mozilla Removes Theora Support, Now GNU Needs to Re-encode Videos
Mozilla used to mean something to Free software advocates
An Open Admission Profits Depend on Addiction
Proprietary software tends to be like this
IBM Americas President Ayman Antoun Comes to OpenText, Weeks Ahead the Mass Layoffs Begin
Is that what IBM will be good at?
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Tuesday, March 24, 2026
IRC logs for Tuesday, March 24, 2026
SLAPP Censorship - Part 22 Out of 200: When You Complain People Impersonate You in IRC (But You Yourself Impersonate People in IRC and Lock Them Out of Their IRC Handles)
We'll cover this with direct evidence some time soon
Gemini Links 24/03/2026: Junk Drawer Time Capsule and Building Outside Alire
Links for the day
Not Much LLM Slop About "Linux" Lately, It Only Ever Comes From the Same Few Sites
As long as only few such sites use LLM slop we can skip and avoid them
Links 24/03/2026: "Epic Lays Off Over 1000 Employees" and US in Financial Trouble According to the Fed
Links for the day
The "Media" Does Not Only 'Miss' Mass Layoffs
"The Treasury just declared the U.S. insolvent. The media missed it"
The Empty Suits of IBM Managers (NIH or "Nothing Invented Here")
IBM's management adopted the business model of parasites
2012: 'Secure' (Microsoft-Controlled) Boot Has Not (Yet) Been Made Obligatory. 2026: systemd Has Not Implemented Age Verification
should we stop calling "nazi" everyone we don't agree with?
More Threats (Including Physical Threats) Against Us Are a Dumb Move
It's like a "hit list" (targets list) and I shall keep the police duly informed
New Example of Pentagon in "Feminist" Clothing Inside Fake News of Publishers Paid to Promote Outsourcing to US ("Clown Computing") and American Slop
Google now pays money to promote Google as a friend of women
Hating Techrights is a Career
but is it good for civil society?
Dr. Stallman’s Work Will Never be Considered 'Mainstream' Because He Rejects and Works Against the So-called 'Mainstream'
Try to be more like Stallman
The New Layoffs: 'Silent Layoffs', 'Secret Layoffs', 'Quiet Layoffs', 'Passive Layoffs' 'Stealth Layoffs', and Unannounced Layoffs Disguised as Return-to-Office (RTO Mandates)
The US needs to revisit and fix the WARN Act
EPO "Cocaine Communication Manager" - Part IX - Cocaine Addicts in Charge of the EPO Attacking Families of EPO Staff
Things like being high-profile and being a serious drug addict aren't opposites
What Feminism in Science Means (Codes of Conduct Don't Tackle the Real Issues)
Universality matters, more so in a project or community that's said to build the "universal operating system" (Debian)
SLAPP Censorship - Part 21 Out of 200: It's About Behaviour Online, Not How Much Money From Shadowy Third Parties Gets Spent on Lawyers and Two Barristers
75+ KG of legal papers, 2 cases, 2 barristers (one hiding in the metadata) and maybe two law firms (also hiding in the metadata) against two modest people in Manchester seems disproportionate and vindicative
Links 24/03/2026: "Airports on ICE" and "Have You Paid Your “Intuit Tax”?"
Links for the day
Gemini Links 24/03/2026: Slop Interview and Why Slop Makes Lousy Code
Links for the day
Richard Stallman to Give Public Talk This Thursday at the University of Bologna (Italy)
Hardly the first time he speaks in Bologna
Over at Tux Machines...
GNU/Linux news for the past day
IRC Proceedings: Monday, March 23, 2026
IRC logs for Monday, March 23, 2026