All warfare is based on deception, Sun tzu, The Art of War.
"""
File: monitoring.py
Author: Máximo Núñez Alarcón
Description: This code monitors your website and computer usage.
It checks the internet connection, disk partitions, and then monitors CPU, memory, and disk usage for a specified duration.
Finally, it checks if the website is online.
Usage: Run the script (python ./monitoring.py) to monitor your website and computer.
Dependencies: requests, os, my_progress (from util module)
Requirements: psutil, request, rich, and dotenv
Usage:
1. Ensure the required libraries are installed: pip install psutil requests rich python-dotenv
2. Set up a .env file with the necessary environment variables (e.g., TIME_MONITORING, WEBSITE).
3. Run the script to monitor your computer system and website status.
"""
import psutil
import time
from util import my_progress # It is used for displaying progress of the task
import requests
from rich.console import Console
from rich.rule import Rule
from dotenv import load_dotenv
import os
# Initialize Rich Console for colorful output
console = Console()
# Function to check if the website is online
def check_website(url):
try:
response = requests.get(url)
if response.status_code == 200:
console.print(":thumbs_up:" + " Success! Website "+ url + " is online and working fine.")
else:
print(f"Error! Website {url} returned status code: {response.status_code}")
except requests.RequestException as e:
print(f"Error! Failed to connect to {url}: {e}")
# Function to check internet connection
def check_internet_connection():
console.print(Rule(f'[bold green]Checking...[/bold green]'))
try:
response = requests.get("https://www.google.com", timeout=5)
if response.status_code == 200:
console.print(":thumbs_up:" + " Success! Internet connection is working fine.")
else:
print(f"Error! Failed to connect to Google. Status code: {response.status_code}")
except requests.RequestException as e:
print(f"Error! Failed to connect to Google: {e}")
# Function to monitor computer usage
def monitor_computer(cpu_usage, mem_usage, disk_usage, bars = 50):
cpu_percentage = (cpu_usage / 100.0)
cpu_bar = '█' * int (cpu_percentage * bars) + '-' * (bars -int(cpu_percentage * bars))
mem_percent = (mem_usage / 100.0)
mem_bar = '█' * int (mem_percent * bars) + '-' * (bars -int(mem_percent * bars))
# Disk usage
disk_percent = (disk_usage / 100.0)
disk_bar = '█' * int(disk_percent * bars) + '-' * (bars - int(disk_percent * bars))
print(f"CPU Usage: | {cpu_bar}| {cpu_usage:.2f}% ", end = "")
print(f"Mem Usage: | {mem_bar}| {mem_usage:.2f}% ", end = "")
print(f"Disk Usage: | {disk_bar}| {disk_usage:.2f}% ", end = "\r")
# Main function for monitoring
def my_monitor():
load_dotenv() # Load environment variables from .env file
time_monitoring = int(os.getenv("TIME_MONITORING"))
my_progress("Monitoring my GNU/Linux and website") # Display progress of the task
# Print mounted partitions
for partition in psutil.disk_partitions():
if partition.fstype: # Only show mounted partitions with a filesystem type
print(f"\rPartitions {partition.device}, {partition.mountpoint} ")
start_time = time.time() # Record the start time
while time.time() - start_time < 30: # Run for half a minute (30 seconds)
monitor_computer(psutil.cpu_percent(), psutil.virtual_memory().percent, psutil.disk_usage('/').percent, time_monitoring)
time.sleep(0.5)
check_internet_connection()
load_dotenv() # Load environment variables from .env file
website_url = os.getenv("WEBSITE") # Change this to your website URL
check_website(website_url)
# Execute the monitoring function
if __name__ == '__main__':
my_monitor()
"""
File: my_app.py
Author: Máximo Núñez Alarcón
Description: A collection of functions to manage tasks, calendars, and reminders.
Usage: Run the script to display reminders and pending tasks.
Dependencies: rich, datetime, os
Functions:
- myTasks(): Displays pending tasks with different styles based on their priority.
- myCalendar(calendar_file): Outputs reminders for upcoming events based on today's date.
- check_and_remind(birthday_file): Outputs reminders for today's birthdays, anniversaries, and events based on today's date.
Module-level Execution:
- Executes functions myCalendar(), check_and_remind(), and myTasks() to display reminders and tasks.
Note: Ensure that the necessary files (e.g., calendar.txt, birthdays.txt) are present in the 'assets' directory.
"""
from rich.console import Console
from rich.theme import Theme
from util import my_progress, border_msg, warning_msg
from datetime import datetime # Module for working with date and time
import re # -*- coding: UTF-8 -*-
import os
def myTasks():
"""
Prints pending tasks with different styles based on their priority.
Ensure that the necessary file, e.g., ./assets/mytasks.txt is present in the 'assets' directory.
Format mytasks.txt, a line for each task with the format: [H|N|L] Name and description of task
Args:
None
Returns:
None
"""
my_progress("My pending tasks")
console = Console()
# Open the file in read mode
with open('./assets/mytasks.txt', 'r') as file:
# Iterate through each line in the file
for line in file:
# Strip leading and trailing whitespace from the line
stripped_line = line.strip()
if stripped_line.startswith('H'):
# Print the line
console.print(stripped_line, style="bold red")
elif stripped_line.startswith('N'): # Check if the line starts with 'P'
# Print the line
console.print(stripped_line, style="bold cyan")
elif stripped_line.startswith('L'): # Check if the line starts with 'P'
# Print the line
console.print(stripped_line, style="magenta")
def myCalendar(calendar_file):
"""
Outputs reminders for upcoming events based on today's date, e.g. birthdays and anniversaries.
Ensure that the necessary file, e.g., ./assets/calendar.txt is present in the 'assets' directory.
Format calendar.txt, a line for each event with the format: DD-MM Event name and description
Args:
calendar_file (str): The path to the file containing event dates and descriptions, e.g., myCalendar("./assets/calendar.txt")
Returns:
None
"""
console = Console()
# Get today's date in DD-MM format
today = datetime.now().strftime('%d-%m')
try:
# Open the calendar file and read it line by line
with open(calendar_file, 'r') as file:
for line in file:
# Each line is expected to be in "MM-DD Event" format
date, event = line.strip().split(' ', 1)
if date == today:
warning_msg("Event: 📅" + event)
except FileNotFoundError:
print(f"The file {calendar_file} was not found.")
except Exception as e:
print(f"An error occurred: {e}")
def check_and_remind(birthday_file):
"""
This is a clone of birthday. Outputs reminders for today's birthdays, anniversaries, and events, e.g. birthdays and anniversaries.
Args:
birthday_file (str): The path to the file containing birthday dates and event descriptions, e.g., '/assets/birthdays'
The file should be located inside your project folder.
Example usage: check_and_remind("./assets/birthdays.txt")
Format: DD-MM Event, e.g., 12-25 Christmas Day (Navidad)
Returns:
None
"""
# Get today's date in DD-MM format
today = datetime.now().strftime('%d-%m')
try:
# Open the birthday file and read it line by line
with open(birthday_file, 'r') as file:
for line in file:
# Each line is expected to be in "MM-DD Event" format
date, event = line.strip().split(' ', 1)
if date == today:
if event.upper().find("BIRTHDAY")==-1: # It is a birthday event.
console.print("Happy Birthday: " + ":birthday_cake: " + event)
# We use the rich library to show an emoji.
# To see a list of all the emojis available: python -m rich.emoji
else:
console.print("Event: " + ":calendar: " + event)
except FileNotFoundError:
print(f"The file {birthday_file} was not found.")
except Exception as e:
print(f"An error occurred: {e}")
if __name__ == "__main__":
myCalendar("./assets/calendar.txt")
check_and_remind("./assets/birthdays.txt")
myTasks()
Countdoom is a Python package to fetch and digest the current Doomsday Clock world threat assessment from TheBulletin.org.
import asyncio
from typing import Dict, Union
from countdoom import CountdoomClient
from rich.console import Console
# Implement logic to fetch data asynchronously from the Doomsday Clock API
async def async_get_doomsday_clock() -> Dict[str, Union[str, float, None]]:
"""
Get current Doomsday Clock value (aka fetch data from a Doomsday Clock API) asynchronously using AsyncIO.
return: Dictionary of Doomsday Clock representation styles
"""
client = CountdoomClient()
# client is an object of the CountdoomClient. This class handle the communication with the Doomsday Clock API.
data = await client.fetch_data()
# This method from the class CountdoomClient, fetch_data(), performs the actual HTTP request to the Doomsday Clock API and returns the data.
return data
def get_doomsday_clock():
# The asyncio.run() function will start the asyncio event loop.
# Is is responsible for getting the event loop, running tasks until they are marked as complete, and then closing the event loop.
data = asyncio.run(async_get_doomsday_clock())
# Format the clock data {'sentence': 'IT IS 90 SECONDS TO MIDNIGHT', 'clock': '11:58:30', 'time': '23:58:30', 'minutes': 1.5, 'countdown': 90.0}
formatted_clock = f"\nDoomsday Clock.💥 Time to Midnight: {data['time']}. {data['sentence']}!"
print(formatted_clock)
if __name__ == "__main__":
get_doomsday_clock()
import subprocess
import os
import getpass
from datetime import datetime
import requests
def greating_user(city):
username = getpass.getuser() # It fetchs the current user's username and greets them.
now = datetime.now() # Get the current date and time
current_time = now.strftime("%Y-%m-%d %H:%M:%S") # Format the datetime object as a string
print(f"Hello, {username}! Welcome to your Arch system.")
print(f"Current date and time: {current_time}") # Print the formatted string
subprocess.run(["curl", f"wttr.in/{city}?format=3"])
# It fetch a random quote from the "https://api.quotable.io/random" endpoint. If successful, it prints the quote; if not, it prints an error message.
def fetch_quote():
try:
response = requests.get("https://api.quotable.io/random")
if response.status_code == 200:
data = response.json()
return f"{data['content']} — {data['author']}"
else:
return "Could not fetch a quote at this time."
except requests.RequestException:
return "Could not fetch a quote due to a network error."
if __name__ == "__main__":
city = "Malaga"
greating_user(city)
print(fetch_quote())