Compare commits
	
		
			29 Commits
		
	
	
		
			2b86141b99
			...
			match-asia
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 39b2608a36 | ||
|  | 782e6fc655 | ||
|  | 4ec5f446e8 | ||
|  | dc51e2e646 | ||
|  | c671cb5d61 | ||
|  | 73cb40154c | ||
|  | 19161b872c | ||
|  | a2d7eb6896 | ||
|  | 118e784e4b | ||
|  | 07981fa5ce | ||
|  | 20358fffed | ||
|  | 0bbc89d9be | ||
|  | 7a38b01406 | ||
|  | 92577c120f | ||
|  | f9605dbce3 | ||
|  | 962f35d2e9 | ||
|  | 70be610e92 | ||
|  | f2c499cebc | ||
|  | 4a5b66ec21 | ||
|  | 2686c62bda | ||
|  | 4272418cb0 | ||
|  | e6557e2820 | ||
|  | dbd1d53cb4 | ||
|  | 3a557ba120 | ||
|  | 367a5e075b | ||
|  | 2dbc856a8b | ||
|  | 87f1536e95 | ||
|  | eb71aa4c48 | ||
|  | 6667c774c3 | 
							
								
								
									
										119
									
								
								DiskUtils.py
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								DiskUtils.py
									
									
									
									
									
								
							| @@ -3,25 +3,54 @@ import time | |||||||
| import re | import re | ||||||
| import fnmatch | import fnmatch | ||||||
|  |  | ||||||
| def dowork(): | def check_download_exists_matching_url_version_one(url): | ||||||
|  |  | ||||||
|     ################################################################################################ |     print ("enter > downloads > exist check > version 1") | ||||||
|  |  | ||||||
|     url = "https://sullygnome.com/channel/kaicenat/2023january/streams" |     match = re.search(r"https://sullygnome.com/channel/([^/]+)/(\d+)([a-z]+)/games", url.lower()) | ||||||
|  |  | ||||||
|     print("checking disk for the stuff...") |     if not match: | ||||||
|  |  | ||||||
|     print("url", url) |         print(f"Invalid URL format. Could not extract channel name, year, or month.") | ||||||
|  |  | ||||||
|     fileExists = check_download_exists_matching_url(url) |         return | ||||||
|  |  | ||||||
|     print("file already exists / ",fileExists) |     channel_name, year, month = match.groups() | ||||||
|  |  | ||||||
|     ################################################################################################ |     print("channel / ",channel_name) | ||||||
|  |  | ||||||
| def check_download_exists_matching_url(url): |     #print("year / ",year) | ||||||
|  |  | ||||||
|     print ("hello?") |     #print("month / ",month) | ||||||
|  |  | ||||||
|  |     #file_pattern = f"{channel_name}*{month}*{year}*.csv" | ||||||
|  |  | ||||||
|  |     ## this is a problem. it works but if there 2 channels.  | ||||||
|  |     ## redbull and redbull2 this is throw false positives. ugh | ||||||
|  |  | ||||||
|  |     file_pattern = f"*{channel_name} - game stats on Twitch in {month} {year} - SullyGnome.csv".lower() | ||||||
|  |  | ||||||
|  |     for filename in os.listdir("/home/yankee/Downloads/"): | ||||||
|  |  | ||||||
|  |         updated = filename.lower() | ||||||
|  |  | ||||||
|  |         #print("file in downloads / ",updated) | ||||||
|  |  | ||||||
|  |         if fnmatch.fnmatch(updated, file_pattern): | ||||||
|  |  | ||||||
|  |             print(f"Found matching file: {updated}") | ||||||
|  |  | ||||||
|  |             return True | ||||||
|  |  | ||||||
|  |     else: | ||||||
|  |  | ||||||
|  |         print(f"No matching CSV file found for channel '{channel_name}' in year '{year}' and month '{month}'. (version one)") | ||||||
|  |  | ||||||
|  |         return False | ||||||
|  |  | ||||||
|  | def check_download_exists_matching_url_version_two(url): | ||||||
|  |  | ||||||
|  |     print ("enter > check_download_exists_matching_url_version_two") | ||||||
|  |  | ||||||
|     match = re.search(r"https://sullygnome.com/channel/([^/]+)/(\d+)([a-z]+)/games", url.lower()) |     match = re.search(r"https://sullygnome.com/channel/([^/]+)/(\d+)([a-z]+)/games", url.lower()) | ||||||
|  |  | ||||||
| @@ -39,31 +68,69 @@ def check_download_exists_matching_url(url): | |||||||
|  |  | ||||||
|     print("month / ",month) |     print("month / ",month) | ||||||
|  |  | ||||||
|     #file_pattern = f"{channel_name}*{month}*{year}*.csv" |     for filename in os.listdir("/home/yankee/Downloads/"): | ||||||
|  |  | ||||||
|     ## this is a problem. it works but if there 2 channels.  |  | ||||||
|     ## redbull and redbull2 this is throw false positives. ugh |  | ||||||
|  |  | ||||||
|     file_pattern = f"*{channel_name} - game stats on Twitch in {month} {year} - SullyGnome.csv".lower() |  | ||||||
|  |  | ||||||
|     for filename in os.listdir("/root/Downloads/"): |  | ||||||
|  |  | ||||||
|         updated = filename.lower() |         updated = filename.lower() | ||||||
|  |  | ||||||
|         print("file in downloads / ",updated) |         print("found file (v2) / ",updated) | ||||||
|  |  | ||||||
|         if fnmatch.fnmatch(updated, file_pattern): |         ## | ||||||
|  |  | ||||||
|             print(f"Found matching file: {updated}") |         hasKeyDateParts = does_filename_contain_key_date_parts(updated, month, year) | ||||||
|  |  | ||||||
|             return True |         print("\thasKeyDateParts / ",hasKeyDateParts) | ||||||
|  |  | ||||||
|     else: |         ## | ||||||
|  |  | ||||||
|         print(f"No matching CSV file found for channel '{channel_name}' in year '{year}' and month '{month}'.") |         hasTargetChannelName = does_filename_contain_target_channel_name(updated,channel_name) | ||||||
|  |  | ||||||
|  |         print("\thasTargetChannelName / ",hasTargetChannelName) | ||||||
|  |  | ||||||
|  |         ## | ||||||
|  |  | ||||||
|  |     print ("exit < check_download_exists_matching_url_version_two") | ||||||
|  |  | ||||||
|  | def does_filename_contain_target_channel_name(url,channel):   | ||||||
|  |  | ||||||
|  |     regex = rf"\({re.escape(channel)}\)" | ||||||
|  |  | ||||||
|  |     match = re.search(regex, url) | ||||||
|  |  | ||||||
|  |     results = bool(match) | ||||||
|  |  | ||||||
|  |     print("results / ",results) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     match = re.search("\({channel}\)", url) | ||||||
|  |  | ||||||
|  |     if match: | ||||||
|  |         print("yup!") | ||||||
|  |         extracted_text = match.group(1).lower() | ||||||
|  |  | ||||||
|  |         print("extracted: /",extracted_text) | ||||||
|  |  | ||||||
|         return False |         return False | ||||||
|  |  | ||||||
| def shutDownRobot(): | 	##        return extracted_text == target_string.lower() | ||||||
|  |  | ||||||
|  |     else: | ||||||
|  |         print("nope!") | ||||||
|  |         return False | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def does_filename_contain_key_date_parts(filename, monthString, yearNumber): | ||||||
|  |  | ||||||
|  |     print("enter -> does_filename_contain_key_date_parts()") | ||||||
|  |  | ||||||
|  |     regex = rf"{re.escape(monthString)} {yearNumber}" | ||||||
|  |  | ||||||
|  |     doesContain = bool(re.search(regex, filename, re.IGNORECASE)) | ||||||
|  |  | ||||||
|  |     print("doesContain / ",doesContain) | ||||||
|  |  | ||||||
|  |     return doesContain | ||||||
|  |  | ||||||
|     print("shutting down the robot now") |  | ||||||
|   | |||||||
| @@ -22,7 +22,6 @@ def ip(): | |||||||
|  |  | ||||||
|         return None |         return None | ||||||
|  |  | ||||||
|  |  | ||||||
| def hostname(): | def hostname(): | ||||||
|  |  | ||||||
|     try: |     try: | ||||||
| @@ -56,13 +55,15 @@ def addDownloadSuccess(url): | |||||||
|     print(response.text) |     print(response.text) | ||||||
|  |  | ||||||
|  |  | ||||||
| def addDownloadFailure(url): | def addDownloadFailure(url, error): | ||||||
|  |  | ||||||
|     print("enter -> addDownloadFailure()") |     print("enter -> addDownloadFailure()") | ||||||
|  |  | ||||||
|     print("param / url / ",url) |     print("param / url / ",url) | ||||||
|  |  | ||||||
|  |     print("param / error / ",error) | ||||||
|      |      | ||||||
|     data = {"url": url, "hostIP": ip(),"ip": ip(),"hostName":hostname()} |     data = {"url": url, "hostIP": ip(),"ip": ip(),"hostName":hostname(), "reason":error} | ||||||
|  |  | ||||||
|     json_data = json.dumps(data) |     json_data = json.dumps(data) | ||||||
|  |  | ||||||
| @@ -78,9 +79,9 @@ def addDownloadFailure(url): | |||||||
|  |  | ||||||
| def searchURLSuccesses(url): | def searchURLSuccesses(url): | ||||||
|  |  | ||||||
|     print("enter -> callGET()") |     ## print("enter -> callGET()") | ||||||
|  |  | ||||||
|     print("param / url / ",url) |     ## print("param / url / ",url) | ||||||
|      |      | ||||||
|     data = { "url": url } |     data = { "url": url } | ||||||
|  |  | ||||||
| @@ -90,15 +91,15 @@ def searchURLSuccesses(url): | |||||||
|  |  | ||||||
|     response = requests.post("https://apis.yankee.embanet.online/channel/monthly/games/success/exists", data=json_data, headers=headers) |     response = requests.post("https://apis.yankee.embanet.online/channel/monthly/games/success/exists", data=json_data, headers=headers) | ||||||
|  |  | ||||||
|     print(response.text) |     ## print(response.text) | ||||||
|  |  | ||||||
|     return response.text |     return response.text | ||||||
|  |  | ||||||
| def searchURLFailures(url): | def searchURLFailures(url): | ||||||
|  |  | ||||||
|     print("enter -> callGET()") |     ## print("enter -> callGET()") | ||||||
|  |  | ||||||
|     print("param / url / ",url) |     ## print("param / url / ",url) | ||||||
|      |      | ||||||
|     data = { "url": url } |     data = { "url": url } | ||||||
|  |  | ||||||
| @@ -108,6 +109,6 @@ def searchURLFailures(url): | |||||||
|  |  | ||||||
|     response = requests.post("https://apis.yankee.embanet.online/channel/monthly/games/failure/exists", data=json_data, headers=headers) |     response = requests.post("https://apis.yankee.embanet.online/channel/monthly/games/failure/exists", data=json_data, headers=headers) | ||||||
|  |  | ||||||
|     print(response.text) |     ## print(response.text) | ||||||
|  |  | ||||||
|     return response.text |     return response.text | ||||||
|   | |||||||
| @@ -10,14 +10,12 @@ import RestAPIClient | |||||||
| import DiskUtils | import DiskUtils | ||||||
| from selenium.webdriver import FirefoxOptions | from selenium.webdriver import FirefoxOptions | ||||||
|  |  | ||||||
| ## https://sullygnome.com/channel/kaicenat/365/games" |  | ||||||
|  |  | ||||||
| def download(url): | def download(url): | ||||||
|  |  | ||||||
|     print(f"launch -> SullyGnomeRobot -> download() -> {url}") |     print(f"launch -> SullyGnomeRobot -> download() -> {url}") | ||||||
|  |  | ||||||
|  |  | ||||||
|     opts = FirefoxOptions() |     opts = FirefoxOptions() | ||||||
|  |  | ||||||
|     opts.add_argument("--headless") |     opts.add_argument("--headless") | ||||||
|  |  | ||||||
|     driver=webdriver.Firefox(options=opts) |     driver=webdriver.Firefox(options=opts) | ||||||
| @@ -28,7 +26,6 @@ def download(url): | |||||||
|  |  | ||||||
|     print("url / ", driver.current_url) |     print("url / ", driver.current_url) | ||||||
|  |  | ||||||
|  |  | ||||||
|     ########################################## |     ########################################## | ||||||
|  |  | ||||||
|     print("stage / start / tblControl_length check") |     print("stage / start / tblControl_length check") | ||||||
| @@ -49,7 +46,7 @@ def download(url): | |||||||
|      |      | ||||||
|         print(f"Element with class name 'tblControl_length' not found: {e}") |         print(f"Element with class name 'tblControl_length' not found: {e}") | ||||||
|          |          | ||||||
|         RestAPIClient.addDownloadFailure(url) |         RestAPIClient.addDownloadFailure(url, "Element with class name 'tblControl_length' not found") | ||||||
|  |  | ||||||
|         driver.quit() |         driver.quit() | ||||||
|      |      | ||||||
| @@ -75,7 +72,7 @@ def download(url): | |||||||
|  |  | ||||||
|         print(f"Element with class name 'TableExportLinkButton' not found: {e}") |         print(f"Element with class name 'TableExportLinkButton' not found: {e}") | ||||||
|  |  | ||||||
|         RestAPIClient.addDownloadFailure(url) |         RestAPIClient.addDownloadFailure(url,"Element with class name 'TableExportLinkButton' not found") | ||||||
|  |  | ||||||
|         driver.quit() |         driver.quit() | ||||||
|      |      | ||||||
| @@ -87,17 +84,47 @@ def download(url): | |||||||
|  |  | ||||||
|     print("file download started. now checking if exist before closing") |     print("file download started. now checking if exist before closing") | ||||||
|  |  | ||||||
|  |     counter = 0 | ||||||
|  |  | ||||||
|  |     max_iterations = 5 | ||||||
|  |  | ||||||
|     while True: |     while True: | ||||||
|  |  | ||||||
|  |         print(f"Loop iteration: {counter}") | ||||||
|  |  | ||||||
|  |         counter += 1 | ||||||
|  |  | ||||||
|  |         if counter == max_iterations: | ||||||
|  |  | ||||||
|  |             print(f"Loop exited after {max_iterations} iterations.") | ||||||
|  |  | ||||||
|  |             print("shutting down the robot") | ||||||
|  |  | ||||||
|  |             driver.quit() | ||||||
|  |  | ||||||
|  |             print("robot shut down. breaking. and dying.") | ||||||
|  |  | ||||||
|  |             RestAPIClient.addDownloadFailure(url,"file not found on disk") | ||||||
|  |  | ||||||
|  |             print("stage / complete / database updated w/ FAILURE") | ||||||
|  |  | ||||||
|  |             break | ||||||
|  |  | ||||||
|         print("checking is file exists... [loop]") |         print("checking is file exists... [loop]") | ||||||
|  |  | ||||||
|         existsAlready = DiskUtils.check_download_exists_matching_url(url) |         existsAlreadyVersionOne = DiskUtils.check_download_exists_matching_url_version_one(url) | ||||||
|  |  | ||||||
|         print("file already exists / ",existsAlready) |         print("file already exists (v1) / ",existsAlreadyVersionOne) | ||||||
|  |  | ||||||
|         if existsAlready: |         existsAlreadyVersionTwo = DiskUtils.check_download_exists_matching_url_version_two(url) | ||||||
|  |  | ||||||
|             print(f"The file matching the url '{url}' exists.") |         print("file already exists (v2) / ",existsAlreadyVersionTwo) | ||||||
|  |  | ||||||
|  |         time.sleep(40) | ||||||
|  |  | ||||||
|  |         if existsAlreadyVersionOne: | ||||||
|  |  | ||||||
|  |             print(f"The file matching the url '{url}' DOES INDEED exists. (version 1)") | ||||||
|  |  | ||||||
|             print("sleeping for 4 secs before shutting down robot") |             print("sleeping for 4 secs before shutting down robot") | ||||||
|  |  | ||||||
| @@ -109,6 +136,10 @@ def download(url): | |||||||
|  |  | ||||||
|             print("robot shut down. breaking. and dying.") |             print("robot shut down. breaking. and dying.") | ||||||
|  |  | ||||||
|  |             RestAPIClient.addDownloadSuccess(url) | ||||||
|  |  | ||||||
|  |             print("stage / complete / database updated w/ success") | ||||||
|  |  | ||||||
|             break |             break | ||||||
|  |  | ||||||
|         else: |         else: | ||||||
| @@ -123,8 +154,4 @@ def download(url): | |||||||
|  |  | ||||||
|     ########################################## |     ########################################## | ||||||
|  |  | ||||||
|     RestAPIClient.addDownloadSuccess(url) |  | ||||||
|  |  | ||||||
|     print("stage / complete / database updated w/ success") |  | ||||||
|  |  | ||||||
|     print(f"complete -> SullyGnomeRobot -> download() -> {url}") |     print(f"complete -> SullyGnomeRobot -> download() -> {url}") | ||||||
|   | |||||||
| @@ -3,15 +3,13 @@ | |||||||
| set -e | set -e | ||||||
|  |  | ||||||
| set -x | set -x | ||||||
|  |  | ||||||
| ## | ## | ||||||
|  |  | ||||||
| echo "what up????" | ##cd /yankee-gnome-fire-consumer | ||||||
|  |  | ||||||
| cd /yankee-gnome-fire-consumer | echo "##" | ||||||
|  | echo "## init > yankee > consumer" | ||||||
|  | echo "##" | ||||||
|  |  | ||||||
| pwd  |  | ||||||
|  |  | ||||||
| ls |  | ||||||
|  |  | ||||||
| whoami |  | ||||||
| python3 consumer.py | python3 consumer.py | ||||||
|   | |||||||
							
								
								
									
										83
									
								
								consumer.py
									
									
									
									
									
								
							
							
						
						
									
										83
									
								
								consumer.py
									
									
									
									
									
								
							| @@ -3,43 +3,80 @@ import time | |||||||
| import SullyGnomeRobot | import SullyGnomeRobot | ||||||
| import RestAPIClient | import RestAPIClient | ||||||
|  |  | ||||||
|  | ### start variables ### | ||||||
|  |  | ||||||
|  | jmsQueue="asian-tester" | ||||||
|  |  | ||||||
|  | host = '38.107.226.34' | ||||||
|  |  | ||||||
|  | port = 61613 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | username = 'admin' | ||||||
|  | password = 'password' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ### end variables ### | ||||||
|  |  | ||||||
| print("## ") | print("## ") | ||||||
| print("## starting > JMS consumer (yankee-sully-channels-monthly)") | print(f"## starting > JMS consumer app!") | ||||||
| print("## ") | print("## ") | ||||||
|  |  | ||||||
|  | def writeSullyURLToJMS(): | ||||||
|  |  | ||||||
|  |     channel="https://sullygnome.com/channel/yaritaiji/2024october/games" | ||||||
|  |      | ||||||
|  |     print(f"launch -> jms writer -> channel-> {channel}") | ||||||
|  |  | ||||||
|  |     conn = stomp.Connection([('osiris.yankee.embanet.online', 61613)]) | ||||||
|  |  | ||||||
|  |     conn.connect('admin', 'password', wait=True) | ||||||
|  |  | ||||||
|  |     try: | ||||||
|  |  | ||||||
|  |         conn.send(body=channel.strip(), destination=f'/queue/{jmsQueue}') | ||||||
|  |  | ||||||
|  |     finally: | ||||||
|  |  | ||||||
|  |         conn.disconnect() | ||||||
|  |          | ||||||
| class MyListener(stomp.ConnectionListener): | class MyListener(stomp.ConnectionListener): | ||||||
|  |  | ||||||
|     def on_message(headers, message): |     def on_message(headers, message): | ||||||
|  |  | ||||||
|         print("** new message! **") |         ## print("** new message! **") | ||||||
|  |  | ||||||
|         print("message / ", message) |         ## print("message / ", message) | ||||||
|  |  | ||||||
|         print("messagebody / ", message.body) |         print("JMS url -> ", message.body) | ||||||
|  |  | ||||||
|         print("checking the value does or doesnt exist in db") |         ## print("checking the value does or doesnt exist in db") | ||||||
|  |  | ||||||
|         alreadyExistsSuccess = RestAPIClient.searchURLSuccesses(message.body) |         alreadyExistsSuccess = RestAPIClient.searchURLSuccesses(message.body) | ||||||
|  |  | ||||||
|         print("alreadyExistsSuccess / ", alreadyExistsSuccess) |         ## print("alreadyExistsSuccess / ", alreadyExistsSuccess) | ||||||
|  |  | ||||||
|         if alreadyExistsSuccess.lower().strip() == "true": |         if alreadyExistsSuccess.lower().strip() == "true": | ||||||
|      |      | ||||||
|             print("this record exists (successes). returning. doing nothing") |             ## print("this record exists (successes). returning. doing nothing") | ||||||
|  |  | ||||||
|             return |             ## return | ||||||
|  |  | ||||||
|         print("didn't exist in success. check in errors now.") |             print ("skipped!!") | ||||||
|  |              | ||||||
|  |         ## print("didn't exist in success. check in errors now.") | ||||||
|  |  | ||||||
|         alreadyExistsFailure = RestAPIClient.searchURLFailures(message.body) |         alreadyExistsFailure = RestAPIClient.searchURLFailures(message.body) | ||||||
|  |  | ||||||
|         print("alreadyExistsFailure / ", alreadyExistsFailure) |         ## print("alreadyExistsFailure / ", alreadyExistsFailure) | ||||||
|  |  | ||||||
|         if alreadyExistsFailure.lower().strip() == "true": |         if alreadyExistsFailure.lower().strip() == "true": | ||||||
|  |  | ||||||
|             print("this record exists (failures). returning. doing nothing") |             ## print("this record exists (failures). returning. doing nothing") | ||||||
|  |  | ||||||
|             return |             ##return | ||||||
|  |              | ||||||
|  |             print ("skipped!!") | ||||||
|  |  | ||||||
|         print("didn't exist in success or errors. will process now") |         print("didn't exist in success or errors. will process now") | ||||||
|  |  | ||||||
| @@ -51,28 +88,33 @@ class MyListener(stomp.ConnectionListener): | |||||||
|  |  | ||||||
|             print(f"exception / something went wrong when the sully gnome robot was downloading: {e}") |             print(f"exception / something went wrong when the sully gnome robot was downloading: {e}") | ||||||
|  |  | ||||||
|             RestAPIClient.addDownloadFailure(message.body) |             RestAPIClient.addDownloadFailure(message.body, e) | ||||||
|  |  | ||||||
|     def on_error(headers, message): |     def on_error(headers, message): | ||||||
|  |  | ||||||
|         print('received an error "%s"' % message) |         print('received an error "%s"' % message) | ||||||
|          |          | ||||||
|         RestAPIClient.addDownloadFailure(message.body) |         RestAPIClient.addDownloadFailure(message.body, "error from onmessage (consumer.py)") | ||||||
|  |  | ||||||
| print("## ") | print("## ") | ||||||
| print("## starting > JMS consumer (yankee-sully-channels-monthly)") | print(f"## starting > JMS consumer ([{jmsQueue}]") | ||||||
| print("## ") | print("## ") | ||||||
|  |  | ||||||
| conn = stomp.Connection([('67.220.70.106', 61613)]) | writeSullyURLToJMS() | ||||||
|  | connection_details = [(host, port)] | ||||||
|  |  | ||||||
|  | conn = stomp.Connection(connection_details) | ||||||
|  |  | ||||||
| conn.set_listener('', MyListener()) | conn.set_listener('', MyListener()) | ||||||
|  |  | ||||||
| conn.connect('admin', 'password', wait=True) | conn.connect(username, password, wait=True) | ||||||
|  |  | ||||||
| conn.subscribe('/queue/yankee-sully-channels-monthly', id=1, ack='auto', headers={'activemq.prefetchSize': 10}) | conn.subscribe(f'/queue/{jmsQueue}', id=1, ack='auto', headers={'activemq.prefetchSize': 10}) | ||||||
|  |  | ||||||
|  | print(f"Subscribed to queue: {jmsQueue}") | ||||||
|  |      | ||||||
| print("## ") | print("## ") | ||||||
| print("## notification > connected to JMS server (yankee-sully-channels-monthly) 3333") | print(f"## notification > connected to JMS server [{jmsQueue}] (upgrade)") | ||||||
| print("## ") | print("## ") | ||||||
|  |  | ||||||
| while True: | while True: | ||||||
| @@ -80,5 +122,6 @@ while True: | |||||||
|     pass |     pass | ||||||
|  |  | ||||||
|     time.sleep(1) |     time.sleep(1) | ||||||
|      |         | ||||||
| conn.disconnect() | conn.disconnect() | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								recycle/crontabX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								recycle/crontabX
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | SHELL=/bin/bash | ||||||
|  |  | ||||||
|  | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | ||||||
|  |  | ||||||
|  | 6 11 * * * python3 /yankee-gnome-fire-consumer/consumer.py >> /tmp/root/Downloads/.logs/yankee-node-96.255.165.82-veneno.log 2>&1 | ||||||
|  |  | ||||||
							
								
								
									
										7
									
								
								recycle/crontabX2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								recycle/crontabX2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | SHELL=/bin/bash | ||||||
|  | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | ||||||
|  |  | ||||||
|  | 48 20 * * *  /yankee-gnome-fire-consumer/consumer.bash >> /var/log/yankee.log | ||||||
|  |  | ||||||
|  | * * * * * /yankee-gnome-fire-consumer/ping.bash >> /var/log/cron.log 2>&1 | ||||||
|  |  | ||||||
							
								
								
									
										4
									
								
								recycle/ping.bash
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								recycle/ping.bash
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  |  | ||||||
|  | touch /tmp/`date +%Y_%m_%d_%H_%M_%S`.dat | ||||||
|  |  | ||||||
|  | ls -lha /tmp/*dat | ||||||
							
								
								
									
										151
									
								
								recycle/smart-cron-builder (copy 1).py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										151
									
								
								recycle/smart-cron-builder (copy 1).py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,151 @@ | |||||||
|  | import datetime | ||||||
|  | import subprocess | ||||||
|  | import socket | ||||||
|  | import os | ||||||
|  | import requests | ||||||
|  |  | ||||||
|  | def buildLogDirectory(): | ||||||
|  |  | ||||||
|  |     return "/root/Downloads/.logs/" | ||||||
|  |  | ||||||
|  | def buildLogFileName(): | ||||||
|  |  | ||||||
|  |     logFileDir = buildLogDirectory() | ||||||
|  |  | ||||||
|  |     try: | ||||||
|  |  | ||||||
|  |         response = requests.get("https://api.ipify.org?format=json")  # Or another similar service | ||||||
|  |  | ||||||
|  |         response.raise_for_status()  # Check for HTTP errors (4xx or 5xx) | ||||||
|  |  | ||||||
|  |         ip_data = response.json() | ||||||
|  |  | ||||||
|  |         server_ip = ip_data['ip'] | ||||||
|  |  | ||||||
|  |         print("server_ip / ",ip_data['ip']) | ||||||
|  |  | ||||||
|  |         server_hostname = socket.gethostname() | ||||||
|  |  | ||||||
|  |         print("server_hostname / ",server_hostname) | ||||||
|  |  | ||||||
|  |         node_id= logFileDir + "yankee-node-" + server_ip + "-" + server_hostname + ".log" | ||||||
|  |  | ||||||
|  |         return node_id | ||||||
|  |  | ||||||
|  |     except socket.gaierror: | ||||||
|  |  | ||||||
|  |         return "!!error!!" | ||||||
|  |  | ||||||
|  | def buildCronExecuteTime(): | ||||||
|  |  | ||||||
|  |     current_time = datetime.datetime.now() | ||||||
|  |  | ||||||
|  |     new_minute = (current_time.minute + 2) % 60  # The % operator performs the wrap-around | ||||||
|  |  | ||||||
|  |     print("new_minute / ",new_minute) | ||||||
|  |  | ||||||
|  |     new_hour = current_time.hour + (current_time.minute + 5) // 60 # Integer division for hour increment | ||||||
|  |  | ||||||
|  |     print("new_hour / ",new_hour) | ||||||
|  |  | ||||||
|  |     cron = str(new_minute) + " " + str(new_hour) + " " + "* * *" | ||||||
|  |  | ||||||
|  |     return cron | ||||||
|  |  | ||||||
|  | def buildCronSituation(): | ||||||
|  |  | ||||||
|  |     return buildCronExecuteTime() +" python3 /yankee-gnome-fire-consumer/consumer.py >> " + buildLogFileName() + " 2>&1" | ||||||
|  |  | ||||||
|  | #### | ||||||
|  |  | ||||||
|  | cronTiming = buildCronExecuteTime() | ||||||
|  |  | ||||||
|  | print("cronTiming / ",cronTiming) | ||||||
|  |  | ||||||
|  | ## | ||||||
|  |  | ||||||
|  | logger = buildLogFileName(); | ||||||
|  |  | ||||||
|  | print("logger / ",logger) | ||||||
|  |  | ||||||
|  | ## | ||||||
|  |  | ||||||
|  | cronFile = buildCronSituation(); | ||||||
|  |  | ||||||
|  | print() | ||||||
|  | print(cronFile) | ||||||
|  | print() | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def createLogDir(): | ||||||
|  |  | ||||||
|  |     log_dir = buildLogDirectory() | ||||||
|  |  | ||||||
|  |     print("creating log dir",log_dir) | ||||||
|  |  | ||||||
|  |     try: | ||||||
|  |         if not os.path.exists(log_dir):  # Check if the directory exists | ||||||
|  |             os.makedirs(log_dir)  # Create the directory (and any necessary parent directories) | ||||||
|  |             print(f"Directory '{log_dir}' created successfully.") | ||||||
|  |         else: | ||||||
|  |             print(f"Directory '{log_dir}' already exists.") | ||||||
|  |         return True  # Directory exists or was created successfully | ||||||
|  |  | ||||||
|  |     except OSError as e: | ||||||
|  |         print(f"Error creating directory '{log_dir}': {e}") | ||||||
|  |         return False | ||||||
|  |  | ||||||
|  | ## | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def writeCrontabSituation(): | ||||||
|  |  | ||||||
|  |     file_path ="crontabX" | ||||||
|  |  | ||||||
|  |     crontab_text = """ | ||||||
|  | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | ||||||
|  |  | ||||||
|  | * * * * * python3 /yankee-gnome-fire-consumer/consumer.py >> /var/log/yankee-downloader.log 2>&1 | ||||||
|  |  | ||||||
|  | * * * * * /tmp/ping2.bash >> /var/log/cron.log 2>&1""" | ||||||
|  |  | ||||||
|  |     try: | ||||||
|  |         # Check if the file exists and delete if it does | ||||||
|  |         if os.path.exists(file_path): | ||||||
|  |             os.remove(file_path) | ||||||
|  |  | ||||||
|  |         with open(file_path, "w") as f: | ||||||
|  |  | ||||||
|  |             sep="\n" | ||||||
|  |  | ||||||
|  |             f.write("SHELL=/bin/bash") | ||||||
|  |             f.write(sep) | ||||||
|  |  | ||||||
|  |             f.write("PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin") | ||||||
|  |             f.write(sep) | ||||||
|  |             f.write(sep) | ||||||
|  |  | ||||||
|  |             f.write(buildCronSituation()) | ||||||
|  |             f.write(sep) | ||||||
|  |             f.write(sep) | ||||||
|  |  | ||||||
|  |             f.write("* * * * * /tmp/ping.bash >> /var/log/cron.log 2>&1") | ||||||
|  |             f.write(sep) | ||||||
|  |             f.write(sep) | ||||||
|  |  | ||||||
|  |         print(f"Crontab written to '{file_path}' successfully.") | ||||||
|  |  | ||||||
|  |         return True | ||||||
|  |  | ||||||
|  |     except OSError as e: | ||||||
|  |  | ||||||
|  |         print(f"Error writing to file '{file_path}': {e}") | ||||||
|  |  | ||||||
|  |         return False | ||||||
|  |  | ||||||
|  | #################### | ||||||
|  |  | ||||||
|  | createLogDir() | ||||||
|  |  | ||||||
|  | writeCrontabSituation() | ||||||
							
								
								
									
										17
									
								
								recycle/smart-cron-builder.bash
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								recycle/smart-cron-builder.bash
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | reset | ||||||
|  |  | ||||||
|  | clear | ||||||
|  |  | ||||||
|  | python3 smart-cron-builder.py | ||||||
|  |  | ||||||
|  | #### | ||||||
|  |  | ||||||
|  | cp crontabX /etc/cron.d/cronfile | ||||||
|  |  | ||||||
|  | # Give execution rights on the cron job | ||||||
|  | chmod 0644 /etc/cron.d/cronfile | ||||||
|  |  | ||||||
|  | # Apply the cron job | ||||||
|  | crontab -u root /etc/cron.d/cronfile | ||||||
|  |  | ||||||
|  | crontab -l | ||||||
							
								
								
									
										157
									
								
								recycle/smart-cron-builder.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										157
									
								
								recycle/smart-cron-builder.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,157 @@ | |||||||
|  | import datetime | ||||||
|  | import subprocess | ||||||
|  | import socket | ||||||
|  | import os | ||||||
|  | import requests | ||||||
|  |  | ||||||
|  | def buildLogDirectory(): | ||||||
|  |  | ||||||
|  |     return "/root/Downloads/.logs/" | ||||||
|  |  | ||||||
|  | def buildLogFileName(): | ||||||
|  |  | ||||||
|  |     logFileDir = buildLogDirectory() | ||||||
|  |  | ||||||
|  |     try: | ||||||
|  |  | ||||||
|  |         response = requests.get("https://api.ipify.org?format=json")  # Or another similar service | ||||||
|  |  | ||||||
|  |         response.raise_for_status()  # Check for HTTP errors (4xx or 5xx) | ||||||
|  |  | ||||||
|  |         ip_data = response.json() | ||||||
|  |  | ||||||
|  |         server_ip = ip_data['ip'] | ||||||
|  |  | ||||||
|  |         print("server_ip / ",ip_data['ip']) | ||||||
|  |  | ||||||
|  |         server_hostname = socket.gethostname() | ||||||
|  |  | ||||||
|  |         print("server_hostname / ",server_hostname) | ||||||
|  |  | ||||||
|  |         #node_id=logFileDir + "yankee-node-" + server_ip + "-" + server_hostname + ".log" | ||||||
|  |  | ||||||
|  |         node_id= "/var/log/yankee.log" | ||||||
|  |  | ||||||
|  |         return node_id | ||||||
|  |  | ||||||
|  |     except socket.gaierror: | ||||||
|  |  | ||||||
|  |         return "!!error!!" | ||||||
|  |  | ||||||
|  | def buildCronExecuteTime(): | ||||||
|  |  | ||||||
|  |     current_time = datetime.datetime.now() | ||||||
|  |  | ||||||
|  |     new_minute = (current_time.minute + 2) % 60 | ||||||
|  |  | ||||||
|  |     print("new_minute / ",new_minute) | ||||||
|  |  | ||||||
|  |     new_hour = (current_time.hour + 5) % 24 | ||||||
|  |  | ||||||
|  |     print("new_hour / ",new_hour) | ||||||
|  |  | ||||||
|  |     cron = str(new_minute) + " " + str(new_hour) + " " + "* * * " | ||||||
|  |  | ||||||
|  |     return cron | ||||||
|  |  | ||||||
|  | def buildCronSituation(): | ||||||
|  |  | ||||||
|  |     ##return "* * * * * /yankee-gnome-fire-consumer/consumer.bash >> " + buildLogFileName() | ||||||
|  |  | ||||||
|  |     return buildCronExecuteTime() + " /yankee-gnome-fire-consumer/consumer.bash >> " + buildLogFileName() | ||||||
|  |  | ||||||
|  |     ##return buildCronExecuteTime() +" /yankee-gnome-fire-consumer/consumer.bash >> " + buildLogFileName() + " 2>&1" | ||||||
|  |  | ||||||
|  |     ##return buildCronExecuteTime() +" python3 /yankee-gnome-fire-consumer/consumer.py >> " + buildLogFileName() + " 2>&1" | ||||||
|  |  | ||||||
|  | #### | ||||||
|  |  | ||||||
|  | cronTiming = buildCronExecuteTime() | ||||||
|  |  | ||||||
|  | print("cronTiming / ",cronTiming) | ||||||
|  |  | ||||||
|  | ## | ||||||
|  |  | ||||||
|  | logger = buildLogFileName(); | ||||||
|  |  | ||||||
|  | print("logger / ",logger) | ||||||
|  |  | ||||||
|  | ## | ||||||
|  |  | ||||||
|  | cronFile = buildCronSituation(); | ||||||
|  |  | ||||||
|  | print() | ||||||
|  | print(cronFile) | ||||||
|  | print() | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def createLogDir(): | ||||||
|  |  | ||||||
|  |     log_dir = buildLogDirectory() | ||||||
|  |  | ||||||
|  |     print("creating log dir",log_dir) | ||||||
|  |  | ||||||
|  |     try: | ||||||
|  |         if not os.path.exists(log_dir):  # Check if the directory exists | ||||||
|  |             os.makedirs(log_dir)  # Create the directory (and any necessary parent directories) | ||||||
|  |             print(f"Directory '{log_dir}' created successfully.") | ||||||
|  |         else: | ||||||
|  |             print(f"Directory '{log_dir}' already exists.") | ||||||
|  |         return True  # Directory exists or was created successfully | ||||||
|  |  | ||||||
|  |     except OSError as e: | ||||||
|  |         print(f"Error creating directory '{log_dir}': {e}") | ||||||
|  |         return False | ||||||
|  |  | ||||||
|  | ## | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def writeCrontabSituation(): | ||||||
|  |  | ||||||
|  |     file_path ="crontabX" | ||||||
|  |  | ||||||
|  |     try: | ||||||
|  |  | ||||||
|  |         if os.path.exists(file_path): | ||||||
|  |  | ||||||
|  |             os.remove(file_path) | ||||||
|  |  | ||||||
|  |         with open(file_path, "w") as f: | ||||||
|  |  | ||||||
|  |             sep="\n" | ||||||
|  |  | ||||||
|  |             f.write("SHELL=/bin/bash") | ||||||
|  |             f.write(sep) | ||||||
|  |  | ||||||
|  |             f.write("PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin") | ||||||
|  |             f.write(sep) | ||||||
|  |             f.write(sep) | ||||||
|  |  | ||||||
|  |             f.write(buildCronSituation()) | ||||||
|  |             f.write(sep) | ||||||
|  |             f.write(sep) | ||||||
|  |  | ||||||
|  |             f.write("* * * * * /yankee-gnome-fire-consumer/ping.bash >> /var/log/cron.log 2>&1") | ||||||
|  |             f.write(sep) | ||||||
|  |             f.write(sep) | ||||||
|  |  | ||||||
|  |             #worksf.write("* * * * * /yankee-gnome-fire-consumer/consumer.bash >> /var/log/consumer.log 2>&1") | ||||||
|  |             #f.write(sep) | ||||||
|  |             #f.write(sep) | ||||||
|  |  | ||||||
|  |         print(f"Crontab written to '{file_path}' successfully.") | ||||||
|  |  | ||||||
|  |         return True | ||||||
|  |  | ||||||
|  |     except OSError as e: | ||||||
|  |  | ||||||
|  |         print(f"Error writing to file '{file_path}': {e}") | ||||||
|  |  | ||||||
|  |         return False | ||||||
|  |  | ||||||
|  | #################### | ||||||
|  |  | ||||||
|  | #createLogDir() | ||||||
|  |  | ||||||
|  | writeCrontabSituation() | ||||||
		Reference in New Issue
	
	Block a user