From 25472b208ce786e75aa8ce10f79e1ce472adf4f8 Mon Sep 17 00:00:00 2001 From: Hamid Reza Mohammadi Date: Fri, 16 Oct 2020 18:42:40 +0330 Subject: [PATCH] #20 refactoring code to allow retry attempt --- .../Implementation/AudioNarrationService.cs | 152 +++++++++--------- RMuseum/appsettings.json | 20 +-- 2 files changed, 88 insertions(+), 84 deletions(-) diff --git a/RMuseum/Services/Implementation/AudioNarrationService.cs b/RMuseum/Services/Implementation/AudioNarrationService.cs index 74cc4079..442ae031 100644 --- a/RMuseum/Services/Implementation/AudioNarrationService.cs +++ b/RMuseum/Services/Implementation/AudioNarrationService.cs @@ -561,80 +561,7 @@ namespace RMuseum.Services.Implementation ( async token => { - using var client = new SftpClient - ( - Configuration.GetSection("AudioSFPServer")["Host"], - int.Parse(Configuration.GetSection("AudioSFPServer")["Port"]), - Configuration.GetSection("AudioSFPServer")["Username"], - Configuration.GetSection("AudioSFPServer")["Password"] - ); - try - { - client.Connect(); - - using var x = File.OpenRead(narration.LocalXmlFilePath); - client.UploadFile(x, $"{Configuration.GetSection("AudioSFPServer")["RootPath"]}{narration.RemoteXMLFilePath}", true); - - using var s = File.OpenRead(narration.LocalMp3FilePath); - client.UploadFile(s, $"{Configuration.GetSection("AudioSFPServer")["RootPath"]}{narration.RemoteMp3FilePath}", true); - - string sql = $"INSERT INTO ganja_gaudio (audio_post_ID,audio_order,audio_xml,audio_ogg,audio_mp3,audio_title,audio_artist," + - $"audio_artist_url,audio_src,audio_src_url, audio_guid, audio_fchecksum, audio_mp3bsize, audio_oggbsize, audio_date) VALUES " + - $"({narration.GanjoorPostId},{narration.AudioOrder},'{narration.RemoteXMLFilePath}', '', '{narration.Mp3Url}', '{narration.AudioTitle}', '{narration.AudioArtist}', " + - $"'{narration.AudioArtistUrl}', '{narration.AudioSrc}', '{narration.AudioSrcUrl}', '{narration.LegacyAudioGuid}', '{narration.Mp3FileCheckSum}', {narration.Mp3SizeInBytes}, 0, '{$"{narration.ReviewDate:0:u}".Replace("Z", "")}')"; - - using (MySqlConnection connection = new MySqlConnection - ( - $"server={Configuration.GetSection("AudioMySqlServer")["Server"]};uid={Configuration.GetSection("AudioMySqlServer")["Username"]};pwd={Configuration.GetSection("AudioMySqlServer")["Password"]};database={Configuration.GetSection("AudioMySqlServer")["Database"]};charset=utf8" - )) - { - await connection.OpenAsync(); - await connection.ExecuteAsync(sql); - } - - //We are using two database for different purposes on the remote - using (MySqlConnection connection = new MySqlConnection - ( - $"server={Configuration.GetSection("AudioMySqlServer")["Server"]};uid={Configuration.GetSection("AudioMySqlServer")["2ndUsername"]};pwd={Configuration.GetSection("AudioMySqlServer")["2ndPassword"]};database={Configuration.GetSection("AudioMySqlServer")["2ndDatabase"]};charset=utf8" - )) - { - await connection.OpenAsync(); - await connection.ExecuteAsync(sql); - } - - using (RMuseumDbContext context = new RMuseumDbContext(Configuration)) //this is long running job, so _context might be already been freed/collected by GC - { - narration.AudioSyncStatus = (int)AudioSyncStatus.SynchronizedOrRejected; - context.AudioFiles.Update(narration); - await context.SaveChangesAsync(); - } - - await _notificationService.PushNotification - ( - narration.OwnerId, - "انتشار خوانش ارسالی", - $"خوانش ارسالی شما منتشر شد.{Environment.NewLine}" + - $"می‌توانید با مراجعه به این صفحه TODO: client url وضعیت آن را بررسی کنید." - ); - - - } - catch(Exception exp) - { - //if an error occurs, narration.AudioSyncStatus is not updated and narration can be idetified later to do "retry" attempts - await _notificationService.PushNotification - ( - narration.OwnerId, - "خطا در پردازش نهایی", - $"{exp}{Environment.NewLine}" + - $"می‌توانید با مراجعه به این صفحه TODO: client url وضعیت آن را بررسی کنید." - ); - } - finally - { - client.Disconnect(); - } - + await _PublishNarration(narration); }); } @@ -649,6 +576,83 @@ namespace RMuseum.Services.Implementation } } + private async Task _PublishNarration(PoemNarration narration) + { + using var client = new SftpClient + ( + Configuration.GetSection("AudioSFPServer")["Host"], + int.Parse(Configuration.GetSection("AudioSFPServer")["Port"]), + Configuration.GetSection("AudioSFPServer")["Username"], + Configuration.GetSection("AudioSFPServer")["Password"] + ); + try + { + client.Connect(); + + using var x = File.OpenRead(narration.LocalXmlFilePath); + client.UploadFile(x, $"{Configuration.GetSection("AudioSFPServer")["RootPath"]}{narration.RemoteXMLFilePath}", true); + + using var s = File.OpenRead(narration.LocalMp3FilePath); + client.UploadFile(s, $"{Configuration.GetSection("AudioSFPServer")["RootPath"]}{narration.RemoteMp3FilePath}", true); + + string sql = $"INSERT INTO ganja_gaudio (audio_post_ID,audio_order,audio_xml,audio_ogg,audio_mp3,audio_title,audio_artist," + + $"audio_artist_url,audio_src,audio_src_url, audio_guid, audio_fchecksum, audio_mp3bsize, audio_oggbsize, audio_date) VALUES " + + $"({narration.GanjoorPostId},{narration.AudioOrder},'{narration.RemoteXMLFilePath}', '', '{narration.Mp3Url}', '{narration.AudioTitle}', '{narration.AudioArtist}', " + + $"'{narration.AudioArtistUrl}', '{narration.AudioSrc}', '{narration.AudioSrcUrl}', '{narration.LegacyAudioGuid}', '{narration.Mp3FileCheckSum}', {narration.Mp3SizeInBytes}, 0, '{$"{narration.ReviewDate:0:u}".Replace("Z", "")}')"; + + using (MySqlConnection connection = new MySqlConnection + ( + $"server={Configuration.GetSection("AudioMySqlServer")["Server"]};uid={Configuration.GetSection("AudioMySqlServer")["Username"]};pwd={Configuration.GetSection("AudioMySqlServer")["Password"]};database={Configuration.GetSection("AudioMySqlServer")["Database"]};charset=utf8" + )) + { + await connection.OpenAsync(); + await connection.ExecuteAsync(sql); + } + + //We are using two database for different purposes on the remote + using (MySqlConnection connection = new MySqlConnection + ( + $"server={Configuration.GetSection("AudioMySqlServer")["Server"]};uid={Configuration.GetSection("AudioMySqlServer")["2ndUsername"]};pwd={Configuration.GetSection("AudioMySqlServer")["2ndPassword"]};database={Configuration.GetSection("AudioMySqlServer")["2ndDatabase"]};charset=utf8" + )) + { + await connection.OpenAsync(); + await connection.ExecuteAsync(sql); + } + + using (RMuseumDbContext context = new RMuseumDbContext(Configuration)) //this is long running job, so _context might be already been freed/collected by GC + { + narration.AudioSyncStatus = (int)AudioSyncStatus.SynchronizedOrRejected; + context.AudioFiles.Update(narration); + await context.SaveChangesAsync(); + } + + await _notificationService.PushNotification + ( + narration.OwnerId, + "انتشار خوانش ارسالی", + $"خوانش ارسالی شما منتشر شد.{Environment.NewLine}" + + $"می‌توانید با مراجعه به این صفحه TODO: client url وضعیت آن را بررسی کنید." + ); + + + } + catch (Exception exp) + { + //if an error occurs, narration.AudioSyncStatus is not updated and narration can be idetified later to do "retry" attempts + await _notificationService.PushNotification + ( + narration.OwnerId, + "خطا در پردازش نهایی", + $"{exp}{Environment.NewLine}" + + $"می‌توانید با مراجعه به این صفحه TODO: client url وضعیت آن را بررسی کنید." + ); + } + finally + { + client.Disconnect(); + } + } + /// /// Get Upload Session (including files) diff --git a/RMuseum/appsettings.json b/RMuseum/appsettings.json index 4c5ec83d..ab296f16 100644 --- a/RMuseum/appsettings.json +++ b/RMuseum/appsettings.json @@ -34,19 +34,19 @@ "From": "test@gmail.com" }, "AudioMySqlServer": { - "Server": "185.8.175.123", - "Username": "ganjoor_wuser", - "Password": "6Uy^gjjUjj889nN", - "Database": "ganjoor_adab", - "2ndDatabase": "ganjoor_adab", - "2ndUsername": "ganjoor_audio", - "2ndPassword": "ytTA8mbFRo" + "Server": "localhost", + "Username": "adab", + "Password": "", + "Database": "adab", + "2ndDatabase": "audio", + "2ndUsername": "audio", + "2ndPassword": "" }, "AudioSFPServer": { - "Host": "185.8.175.123", + "Host": "localhost", "Port": "22", - "Username": "ganjoor", - "Password": "XTtCMM5L", + "Username": "root", + "Password": "", "RootPath": "/home" }, "AudioUploadService": {