[-] [email protected] 1 points 4 days ago* (last edited 4 days ago)

Definitely learned a lot.

This app would be useful if you have more than one device. If you run the monitoring application on the same device as the services you are monitoring and if the device goes down, you wouldn't get a notification, right?

10
submitted 4 days ago by [email protected] to c/[email protected]

Disclaimer: This is for folks who are running services on Windows machines and does not have more than one device. I am neither an expert at self hosting nor PowerShell. I curated most of this code by doing a lot of "Google-ing" and testing over the years. Feel free to correct any mistakes I have in the code.

Background

TLDR: Windows user needs an uptime monitoring solution

Whenever I searched for uptime monitoring apps, most of the ones that showed up were either hosted on Linux or containers and all I wanted was a a simple exe installation file for some app that will send me alerts when a service or the computer was down. Unfortunately, I couldn't find anything. If you know one, feel free to recommend them.

To get uptime monitoring on Windows, I had to turn to scripting along with a hosted solution (because you shouldn't host the monitoring service on the same device as where your apps are running in case the machine goes down). I searched and tested a lot of code to finally end up with the following.

Now, I have services running on both Windows and Linux and I use Uptime Kuma and the following code for monitoring. But, for people who are still on Windows and haven't made the jump to Linux/containers, you could use these scripts to monitor your services with the same device.

Solution

TLDR: A PowerShell script would check the services/processes/URLs/ports and ping the hosted solution to send out notification.

What I came up with is a PowerShell script that would run every 5 minutes (your preference) using Windows Task Scheduler to check if a Service/Process/URL/Port is up or down and send a ping to Healthchecks.io accordingly.

Prereqs

  1. Sign up on healthchecks.io and create a project

  2. Add integration to your favorite notification method (There are several options; I use Telegram)

  3. Add a Check on Healthchecks.io for each of the service you want to monitor. Ex: Radarr, Bazarr, Jellyfin

    When creating the check, make sure to remember the Slug you used (custom or autogenerated) for that service.

  4. Install latest version of PowerShell 7

  5. Create a PowerShell file in your desired location. Ex: healthcheck.ps1 in the C drive

  6. Go to project settings on Healthchecks.io, get the Ping key, and assign it to a variable in the script

    Ex: $HC= "https://hc-ping.com/<YOUR_PING_KEY>/"

    The Ping key is used for pinging Healthchecks.io based on the status of the service.

Code

  1. There are two ways you can write the code: Either check one service or loop through a list.

Port

  1. To monitor a list of ports, we need to add them to the Services.csv file.

    The names of the services need to match the Slug you created earlier because, Healthchecks.io uses that to figure out which Check to ping.

Ex:

"Service", "Port"
"qbittorrent", "5656"
"radarr", "7878"
"sonarr", "8989"
"prowlarr", "9696"
  1. Then copy the following code to healthcheck.ps1:
Import-CSV C:\Services.csv | foreach{
    Write-Output ""
    Write-Output $($_.Service)
    Write-Output "------------------------"
    $RESPONSE = Test-Connection localhost -TcpPort $($_.Port)
    if ($RESPONSE -eq "True") {
        Write-Host "$($_.Service) is running"
        curl $HC$($_.Service)
    } else {
        Write-Host "$($_.Service) is not running"
        curl $HC$($_.Service)/fail
    }
}

The script looks through the Services.csv file (Line 1) and check if each of those ports are listening ($($_.Port) on Line 5) and pings Healthchecks.io (Line 8 or 11) based on their status with their appropriate name ($($_.Service)). If the port is not listening, it will ping the URL with a trailing /fail (Line 11) to indicate it is down.

Service

  1. The following code is to check if a service is running.

    You can add more services on line 1 in comma separated values. Ex: @("bazarr","flaresolverr")

    This also needs to match the Slug.

$SERVICES = @("bazarr")
foreach($SERVICE in $SERVICES) {
    Write-Output ""
    Write-Output $SERVICE
    Write-Output "------------------------"
    $RESPONSE = Get-Service $SERVICE | Select-Object Status
    if ($RESPONSE.Status -eq "Running") {
        Write-Host "$SERVICE is running"
        curl $HC$SERVICE
    } else {
        Write-Host "$SERVICE is not running"
        curl $HC$SERVICE/fail
    }
}

The script looks through the list of services (Line 1) and check if each of those are running (Line 6) and pings Healthchecks.io based on their status.

Process

  1. The following code is to check if a process is running.

    Line 1 needs to match their Slug

$PROCESSES = @("tautulli","jellyfin")
foreach($PROCESS in $PROCESSES) {
	Write-Output ""
	Write-Output $PROCESS
	Write-Output "------------------------"	
	$RESPONSE = Get-Process -Name $PROCESS -ErrorAction SilentlyContinue
	if ($RESPONSE -eq $null) {
		# Write-Host "$PROCESS is not running"
		curl $HC$PROCESS/fail
	} else {
		# Write-Host "$PROCESS is running"
		curl $HC$PROCESS
	}
}

URL

  1. This can be used to check if a URL is responding.

    Line 1 needs to match the Slug

$WEBSVC = "google"
$GOOGLE = "https://google.com"
Write-Output ""
Write-Output $WEBSVC
Write-Output "------------------------"
$RESPONSE = Invoke-WebRequest -URI $GOOGLE -SkipCertificateCheck
if ($RESPONSE.StatusCode -eq 200) {
    # Write-Host "$WEBSVC is running"
    curl $HC$WEBSVC
} else {
    # Write-Host "$WEBSVC is not running"
    curl $HC$WEBSVC/fail
}

Ping other machines

  1. If you have more than one machine and you want to check their status with the Windows host, you can check it by pinging them

  2. Here also I use a CSV file to list the machines. Make sure the server names matches their Slug

    Ex:

    "Server", "IP"
    "server2", "192.168.0.202"
    "server3", "192.168.0.203"
    
Import-CSV C:\Servers.csv | foreach{
    Write-Output ""
    Write-Output $($_.Server)
    Write-Output "------------------------"
    $RESPONSE = Test-Connection $($_.IP) -Count 1 | Select-Object Status
    if ($RESPONSE.Status -eq "Success") {
        # Write-Host "$($_.Server) is running"
        curl $HC$($_.Server)
    } else {
        # Write-Host "$($_.Server) is not running"
        curl $HC$($_.Server)/fail
    }
}

Task Scheduler

For the script to execute in intervals, you need to create a scheduled task.

  1. Open Task Scheduler, navigate to the Library, and click on Create Task on the right
  2. Give it a name. Ex: Healthcheck
    1. Choose Run whether user is logged on or not
    2. Choose Hidden if needed
  3. On Triggers tab, click on New
    1. Choose On a schedule
    2. Choose One time and select an older date than your current date
    3. Select Repeat task every and choose the desired time and duration. Ex: 5 minutes indefinitely
    4. Select Enabled
  4. On Actions tab, click on New
    1. Choose Start a program
    2. Add the path to PowerShell 7 in Program: "C:\Program Files\PowerShell\7\pwsh.exe"
    3. Point to the script in arguments: -windowstyle hidden -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\healthcheck.ps1
  5. Rest of the tabs, you can choose whatever is appropriate for you.
  6. Hit Ok/Apply and exit

Notification Method

Depending on the integration you chose, set it up using the Healthchecks docs.

I am using Telegram with the following configuration:

Name: Telegram
Execute on "down" events: POST https://api.telegram.org/bot<ID>/sendMessage
Request Body:
```
{
    "chat_id": "<CHAT ID>",
    "text": "🔴 $NAME is DOWN",
    "parse_mode": "HTML",
    "no_webpage": true
}
```
Request Headers: Content-Type: application/json
Execute on "up" events: POST https://api.telegram.org/bot<ID>/sendMessage
Request Body:
```
{
"chat_id": "<CHAT ID>",
"text": "🟢 $NAME is UP",
"parse_mode": "HTML",
"no_webpage": true
}
```
Request Headers: Content-Type: application/json

Closing

You can monitor up to 20 services for free. You can also selfhost Healthchecks instance (wouldn't recommend if you only have one machine).

I've been wanting to give something back to the community for a while. I hope this is useful to some of you. Please let me know if you have any questions or suggestions. Thank you for reading!

1
submitted 3 months ago* (last edited 3 months ago) by [email protected] to c/[email protected]

I have an old AIO PC and its touch panel is not working properly. Are there any DEs or distros that doesnt have touch support?

Edit: Thanks to everyone that replied and suggested solutions. For me this worked: https://linuxconfig.org/how-to-blacklist-a-module-on-ubuntu-debian-linux

[-] [email protected] 8 points 3 months ago
9
submitted 4 months ago* (last edited 4 months ago) by [email protected] to c/[email protected]

cross-posted from: https://lemmy.ml/post/15121280

preferably with a web console (not required)

Edit: I went with this as a solution for now: https://github.com/Ashfaaq18/OpenNetMeter

1
submitted 4 months ago* (last edited 3 months ago) by [email protected] to c/[email protected]

cross-posted from: https://lemmy.ml/post/15121280

preferably with a web console (not required)

Edit: I went with this as a solution for now: https://github.com/Ashfaaq18/OpenNetMeter

[-] [email protected] 54 points 5 months ago* (last edited 5 months ago)

Penpot is the first open-source design tool for design and code collaboration. Designers can create stunning designs, interactive prototypes, design systems at scale, while developers enjoy ready-to-use code and make their workflow easy and fast. And all of this with no handoff drama.

https://github.com/penpot/penpot

[-] [email protected] 4 points 5 months ago* (last edited 5 months ago)

Somewhat unrelated question:

How do you list experience based on projects under single employer with timeline?

Right now I have it like this:

  • Consultant

    Employer - 2020 - 2023

    • Developer - June 2023 to August 2023
      • Description 1
      • Description 2
    • Analyst - March 2021 - May 2022
      • Description 1

I havent found any resume template that can handle this (nested experience) automatically

[-] [email protected] 7 points 5 months ago

I've been using comprehensive.io for salaries. Its not as good as Glassdoor for data but, its free and gets the job done for me. Also, layoffs.fyi when I feel like getting depressed

15
submitted 6 months ago* (last edited 6 months ago) by [email protected] to c/[email protected]

I am using vnStat to monitor network bandwidth on a Debian host that has several Docker containers. Because of the containers, there are several interfaces in addition to eth0.

My question is, should I just monitor eth0 instead of looking at all the bridge and virtual interfaces to get the actual usage because at the end of the day, everything goes through eth0? Or am I looking at this wrong?

Sample output:

                      rx      /      tx      /     total    /   estimated
 br-1ee235bc0b60:
       2024-03     13.56 MiB  /   97.42 MiB  /  110.98 MiB  /  391.02 GiB
         today     13.56 MiB  /   97.42 MiB  /  110.98 MiB  /  112.54 MiB

 br-2ce98d77a35a:
       2024-03           0 B  /         0 B  /         0 B  /     --
         today           0 B  /         0 B  /         0 B  /     --

 docker0:
       2024-03           0 B  /         0 B  /         0 B  /     --
         today           0 B  /         0 B  /         0 B  /     --

 eth0:
       2024-03     98.03 MiB  /   15.04 MiB  /  113.07 MiB  /  398.37 GiB
         today     98.03 MiB  /   15.04 MiB  /  113.07 MiB  /  114.66 MiB
[-] [email protected] 25 points 6 months ago* (last edited 6 months ago)

Exactly. I was unemployed for several months and once the desperation kicked in, I would have done anything to get a job.

[-] [email protected] 53 points 6 months ago* (last edited 6 months ago)

I had 5 rounds of interviews with a company last year. After the last round, HR said they got good feedback from everyone but they are cancelling that role because they dont have the funds. Thats 5 hours of time wasted on their side but, I lost so much more time because I had to do research for interviews. You can imagine how I felt after hearing that.

[-] [email protected] 20 points 6 months ago* (last edited 6 months ago)

Someone has started a new repo for tracking these: https://github.com/ssddanbrown/Open-Source-Confusion-Cases

Not really reporting but, can spread awareness

Edit: "someone" is the developer of BookStack

[-] [email protected] 8 points 7 months ago* (last edited 7 months ago)
23
submitted 1 year ago by [email protected] to c/[email protected]

I have had these add-ons installed for a long time. But, do I need them all?

ClearURLs

Skip Redirect

Smart Referer

[-] [email protected] 8 points 1 year ago

Here is a list of websites I had saved from Reddit about 8 years ago. Apologies in advance, I haven't checked any of the URLs if they are still valid.

OP

hitching a ride to add on various study helps. free online education dump incoming:

http://education-portal.com/academy/course/index.html

http://101science.com/

https://iversity.org/

http://www.openculture.com/freeonlinecourses

https://www.coursera.org/

https://www.edx.org/course-list

http://www.dliflc.edu/products.html use the GLOSS link

http://www.coursehero.com/subjects/

http://oli.cmu.edu/

http://ocw.mit.edu/courses/find-by-topic/

http://www.saylor.org/

http://ocw.jhsph.edu/

http://www.open.edu/openlearn/

http://ocw.tufts.edu/

https://itunes.stanford.edu/content/rss.html

http://webcast.berkeley.edu/#

http://www.makeuseof.com/tag/3-websites-started-learning-programming-language/

https://www.futurelearn.com/

http://www.flashcardmachine.com/ You can use flashcards made by other users. Whether you trust them is up to you

http://freerice.com/category It quizzes you on the basics of a subject o your choosing, and donates rice for each answer you get right once you turn off adblock

http://openstaxcollege.org/

http://justenglish.me/2012/09/01/free-books-100-legal-sites-to-download-literature/

http://blog.boundless.com/2013/04/the-cost-of-textbooks-is-too-damn-high-so-boundless-made-free-ones/

http://freescience.info/index.php

To the best of my knowledge, these are all free and legal, and of varying degrees of usefulness. here's the thread I originally put it in, which may have some similar stuff. http://www.reddit.com/r/AskReddit/comments/268a0s/what_random_things_can_i_get_certified_for_over/
2
submitted 1 year ago* (last edited 1 year ago) by [email protected] to c/[email protected]

I am looking to monitor self hosted services that can send notifications to Telegram. Are there any web service monitoring solutions that can be installed on Windows and not installed using Docker?

I checked through awesome-selfhosted and awesome-sysadmin repos and couldn't find one. All the ones I saw were either for Linux or container based.

EDIT: For anyone that comes across this, here is how I resolved this. Thanks to u/dotmatrix for suggesting healthchecks.io

SOLUTION

On the host

  1. Script to check the status of the webpage. Save the file with ps1 extension
$hc= "https://hc-ping.com/<blahblahblah>"
$url = "https://website.com/"
$response = curl $url
if ($response.StatusCode -eq 200) {
    curl $hc
} else {
    curl $hc/fail
}
  1. Set up the above script in Task Scheduler to run every 5 mins

On HealthChecks

  1. Create a check
  2. Create a Telegram integration if you want the notification in a group/direct message/channel: https://healthchecks.io/integrations/add_telegram/
  3. If you want to customize the message or send the message to a topic in a group, you can create a Webhook. Instructions are here: https://github.com/healthchecks/healthchecks/issues/689#issuecomment-1409847685
view more: next ›

tarius

joined 1 year ago