GNU/Weeb Mailing List <[email protected]>
 help / color / mirror / Atom feed
* [PATCH v1 0/2] A bug fix and allow custom MySQL port
@ 2022-12-24 22:00 Ammar Faizi
  2022-12-24 22:00 ` [PATCH v1 1/2] telegram: listener: Fix missing MySQL error recovery function Ammar Faizi
  2022-12-24 22:00 ` [PATCH v1 2/2] Allow custom MySQL port from the env file Ammar Faizi
  0 siblings, 2 replies; 6+ messages in thread
From: Ammar Faizi @ 2022-12-24 22:00 UTC (permalink / raw)
  To: GNU/Weeb Mailing List
  Cc: Ammar Faizi, Muhammad Rizki, Alviro Iskandar Setiawan

From: Ammar Faizi <[email protected]>

Hi,

There are two patches in this series. A bug fix due to recent commit:

   ce17f3e8016c ("telegram: Implement the log message for catching errors")

Also, add a new environment variable DB_PORT for allowing custom MySQL
server port.

Signed-off-by: Ammar Faizi <[email protected]>
---

Ammar Faizi (2):
  telegram: listener: Fix missing MySQL error recovery function
  Allow custom MySQL port from the env file

 daemon/dc.py                       |  7 +++++++
 daemon/discord.env.example         |  1 +
 daemon/telegram.env.example        |  1 +
 daemon/telegram/mailer/listener.py | 21 ++++++++++-----------
 daemon/tg.py                       |  7 +++++++
 5 files changed, 26 insertions(+), 11 deletions(-)


base-commit: f81cc5ddc5e577f01b8fc916ca43e4c1248f4276
-- 
Ammar Faizi


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v1 1/2] telegram: listener: Fix missing MySQL error recovery function
  2022-12-24 22:00 [PATCH v1 0/2] A bug fix and allow custom MySQL port Ammar Faizi
@ 2022-12-24 22:00 ` Ammar Faizi
  2022-12-24 22:59   ` Muhammad Rizki
  2022-12-24 22:00 ` [PATCH v1 2/2] Allow custom MySQL port from the env file Ammar Faizi
  1 sibling, 1 reply; 6+ messages in thread
From: Ammar Faizi @ 2022-12-24 22:00 UTC (permalink / raw)
  To: GNU/Weeb Mailing List
  Cc: Ammar Faizi, Muhammad Rizki, Alviro Iskandar Setiawan

From: Ammar Faizi <[email protected]>

When I restarted the MySQL server, the program kept looping in the
report function, reporting the same error:

   "Lost connection to MySQL server during query"

This happened because commit ce17f3e8016c ("telegram: Implement the log
message for catching errors") added an error logging using a 'try and
except' statement. This statement effectively kills the MySQL recovery
function that the caller ('__run' function) provides.

Create a new function wrapper, report_err(). Also, make sure the MySQL
error recovery function is called.

Fixes: ce17f3e8016c ("telegram: Implement the log message for catching errors")
Signed-off-by: Ammar Faizi <[email protected]>
---
 daemon/telegram/mailer/listener.py | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/daemon/telegram/mailer/listener.py b/daemon/telegram/mailer/listener.py
index 5a182d0..044de6a 100644
--- a/daemon/telegram/mailer/listener.py
+++ b/daemon/telegram/mailer/listener.py
@@ -61,19 +61,23 @@ class Bot():
 		self.db.ping(reconnect=True, attempts=reconnect_attempts,
 			     delay=delay_in_secs)
 
+	async def report_err(caption):
+		if not caption:
+			caption = "No lore URL"
+		exc_str = utils.catch_err()
+		self.logger.warning(exc_str)
+		await self.client.send_log_file(caption)
 
 	async def __run(self):
 		self.logger.info("Running...")
+		url = None
 		try:
 			for url in self.db.get_atom_urls():
 				await self.__handle_atom_url(url)
 		except (OperationalError, DatabaseError) as e:
 			await self.handle_db_error(e)
 		except:
-			exc_str = utils.catch_err()
-			self.logger.warning(exc_str)
-			capt = "Unknown raw lore URL, see full details in the log file."
-			await self.client.send_log_file(capt)
+			await self.report_err(url)
 
 		if not self.isRunnerFixed:
 			self.isRunnerFixed = True
@@ -89,13 +93,8 @@ class Bot():
 	async def __handle_atom_url(self, url):
 		urls = await self.scraper.get_new_threads_urls(url)
 		for url in urls:
-			try:
-				mail = await self.scraper.get_email_from_url(url)
-				await self.__handle_mail(url, mail)
-			except:
-				exc_str = utils.catch_err()
-				self.logger.warning(exc_str)
-				await self.client.send_log_file(url)
+			mail = await self.scraper.get_email_from_url(url)
+			await self.__handle_mail(url, mail)
 
 
 	async def __handle_mail(self, url, mail):
-- 
Ammar Faizi


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v1 2/2] Allow custom MySQL port from the env file
  2022-12-24 22:00 [PATCH v1 0/2] A bug fix and allow custom MySQL port Ammar Faizi
  2022-12-24 22:00 ` [PATCH v1 1/2] telegram: listener: Fix missing MySQL error recovery function Ammar Faizi
@ 2022-12-24 22:00 ` Ammar Faizi
  2022-12-24 22:57   ` Muhammad Rizki
  1 sibling, 1 reply; 6+ messages in thread
From: Ammar Faizi @ 2022-12-24 22:00 UTC (permalink / raw)
  To: GNU/Weeb Mailing List
  Cc: Ammar Faizi, Muhammad Rizki, Alviro Iskandar Setiawan

From: Ammar Faizi <[email protected]>

I don't always use 3306 as the MySQL server port. Allow custom port
to be configured from the env file!

Signed-off-by: Ammar Faizi <[email protected]>
---
 daemon/dc.py                | 7 +++++++
 daemon/discord.env.example  | 1 +
 daemon/telegram.env.example | 1 +
 daemon/tg.py                | 7 +++++++
 4 files changed, 16 insertions(+)

diff --git a/daemon/dc.py b/daemon/dc.py
index f9b57e5..a9d5ebd 100644
--- a/daemon/dc.py
+++ b/daemon/dc.py
@@ -29,10 +29,17 @@ def main():
 	logger = BotLogger(Platform.DISCORD)
 	logger.init()
 
+	port = os.getenv("DB_PORT")
+	if not port:
+		port = 3306
+	else:
+		port = int(port)
+
 	client = GWClient(
 		db_conn=connector.connect(
 			host=os.getenv("DB_HOST"),
 			user=os.getenv("DB_USER"),
+			port=port,
 			password=os.getenv("DB_PASS"),
 			database=os.getenv("DB_NAME")
 		),
diff --git a/daemon/discord.env.example b/daemon/discord.env.example
index 60fcfac..de7e9f4 100644
--- a/daemon/discord.env.example
+++ b/daemon/discord.env.example
@@ -4,6 +4,7 @@ DISCORD_TOKEN=
 # Input your MySQL connection below
 DB_HOST=
 DB_USER=
+DB_PORT=3306
 DB_PASS=
 DB_NAME=
 
diff --git a/daemon/telegram.env.example b/daemon/telegram.env.example
index a070dd0..a42d86c 100644
--- a/daemon/telegram.env.example
+++ b/daemon/telegram.env.example
@@ -9,6 +9,7 @@ BOT_TOKEN=
 # MySQL Config
 DB_HOST=
 DB_USER=
+DB_PORT=3306
 DB_PASS=
 DB_NAME=
 
diff --git a/daemon/tg.py b/daemon/tg.py
index 8382c29..73ff2b9 100644
--- a/daemon/tg.py
+++ b/daemon/tg.py
@@ -21,6 +21,12 @@ def main():
 	logger = BotLogger()
 	logger.init()
 
+	port = os.getenv("DB_PORT")
+	if not port:
+		port = 3306
+	else:
+		port = int(port)
+
 	client = DaemonClient(
 		"telegram/storage/EmailScraper",
 		api_id=int(os.getenv("API_ID")),
@@ -30,6 +36,7 @@ def main():
 		conn=connector.connect(
 			host=os.getenv("DB_HOST"),
 			user=os.getenv("DB_USER"),
+			port=port,
 			password=os.getenv("DB_PASS"),
 			database=os.getenv("DB_NAME")
 		),
-- 
Ammar Faizi


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v1 2/2] Allow custom MySQL port from the env file
  2022-12-24 22:00 ` [PATCH v1 2/2] Allow custom MySQL port from the env file Ammar Faizi
@ 2022-12-24 22:57   ` Muhammad Rizki
  2022-12-24 22:59     ` Ammar Faizi
  0 siblings, 1 reply; 6+ messages in thread
From: Muhammad Rizki @ 2022-12-24 22:57 UTC (permalink / raw)
  To: Ammar Faizi, GNU/Weeb Mailing List; +Cc: Alviro Iskandar Setiawan

On 25/12/2022 05.00, Ammar Faizi wrote:
> From: Ammar Faizi <[email protected]>
> 
> I don't always use 3306 as the MySQL server port. Allow custom port
> to be configured from the env file!
> 
> Signed-off-by: Ammar Faizi <[email protected]>
> ---
>   
> +	port = os.getenv("DB_PORT")
> +	if not port:
> +		port = 3306
> +	else:
> +		port = int(port)
> +
>   	client = GWClient(
>   		db_conn=connector.connect(
>   			host=os.getenv("DB_HOST"),
>   			user=os.getenv("DB_USER"),
> +			port=port,
>   			password=os.getenv("DB_PASS"),
>   			database=os.getenv("DB_NAME")
>   		),

This code can be shorten to:
	client = GWClient(
		db_conn=connector.connect(
			host=os.getenv("DB_HOST"),
			user=os.getenv("DB_USER"),
			port=int(os.environ.get("DB_PORT", 3306)),
			password=os.getenv("DB_PASS"),
			database=os.getenv("DB_NAME")
		)

`os.environ` here is a dict object, a dict object has a .get() function,
the second argument of the .get() is a default return if the first 
argument (dict key) is not exist. Like, DB_PORT is not exist in dict 
keys, then it will return 3306.

>   
> +	port = os.getenv("DB_PORT")
> +	if not port:
> +		port = 3306
> +	else:
> +		port = int(port)
> +
>   	client = DaemonClient(
>   		"telegram/storage/EmailScraper",
>   		api_id=int(os.getenv("API_ID")),
> @@ -30,6 +36,7 @@ def main():
>   		conn=connector.connect(
>   			host=os.getenv("DB_HOST"),
>   			user=os.getenv("DB_USER"),
> +			port=port,
>   			password=os.getenv("DB_PASS"),
>   			database=os.getenv("DB_NAME")
>   		),

Implement this too.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v1 2/2] Allow custom MySQL port from the env file
  2022-12-24 22:57   ` Muhammad Rizki
@ 2022-12-24 22:59     ` Ammar Faizi
  0 siblings, 0 replies; 6+ messages in thread
From: Ammar Faizi @ 2022-12-24 22:59 UTC (permalink / raw)
  To: Muhammad Rizki, GNU/Weeb Mailing List; +Cc: Alviro Iskandar Setiawan

On 12/25/22 5:57 AM, Muhammad Rizki wrote:
> This code can be shorten to:
>      client = GWClient(
>          db_conn=connector.connect(
>              host=os.getenv("DB_HOST"),
>              user=os.getenv("DB_USER"),
>              port=int(os.environ.get("DB_PORT", 3306)),
>              password=os.getenv("DB_PASS"),
>              database=os.getenv("DB_NAME")
>          )
> 
> `os.environ` here is a dict object, a dict object has a .get() function,
> the second argument of the .get() is a default return if the first argument (dict key) is not exist. Like, DB_PORT is not exist in dict keys, then it will return 3306.

LGTM, but I already applied my patches.

Please do that in your patch series later.

-- 
Ammar Faizi


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v1 1/2] telegram: listener: Fix missing MySQL error recovery function
  2022-12-24 22:00 ` [PATCH v1 1/2] telegram: listener: Fix missing MySQL error recovery function Ammar Faizi
@ 2022-12-24 22:59   ` Muhammad Rizki
  0 siblings, 0 replies; 6+ messages in thread
From: Muhammad Rizki @ 2022-12-24 22:59 UTC (permalink / raw)
  To: Ammar Faizi, GNU/Weeb Mailing List; +Cc: Alviro Iskandar Setiawan

On 25/12/2022 05.00, Ammar Faizi wrote:
> From: Ammar Faizi <[email protected]>
> 
> When I restarted the MySQL server, the program kept looping in the
> report function, reporting the same error:
> 
>     "Lost connection to MySQL server during query"
> 
> This happened because commit ce17f3e8016c ("telegram: Implement the log
> message for catching errors") added an error logging using a 'try and
> except' statement. This statement effectively kills the MySQL recovery
> function that the caller ('__run' function) provides.
> 
> Create a new function wrapper, report_err(). Also, make sure the MySQL
> error recovery function is called.
> 
> Fixes: ce17f3e8016c ("telegram: Implement the log message for catching errors")
> Signed-off-by: Ammar Faizi <[email protected]>
> ---

I will test this later, thanks.


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-12-24 22:59 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-24 22:00 [PATCH v1 0/2] A bug fix and allow custom MySQL port Ammar Faizi
2022-12-24 22:00 ` [PATCH v1 1/2] telegram: listener: Fix missing MySQL error recovery function Ammar Faizi
2022-12-24 22:59   ` Muhammad Rizki
2022-12-24 22:00 ` [PATCH v1 2/2] Allow custom MySQL port from the env file Ammar Faizi
2022-12-24 22:57   ` Muhammad Rizki
2022-12-24 22:59     ` Ammar Faizi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox