第一次提交至Git
This commit is contained in:
393
UTS_Core/UTSModule/Service/AppRegister.vb
Normal file
393
UTS_Core/UTSModule/Service/AppRegister.vb
Normal file
@@ -0,0 +1,393 @@
|
||||
Imports System.Text
|
||||
Imports UTS_Core.Database
|
||||
Imports UTS_Core.UTSModule.DbConnect
|
||||
Imports UTS_Core.UTSModule.DbTableModel.Manage
|
||||
|
||||
Namespace UTSModule.Service
|
||||
Public Class AppRegister
|
||||
Implements IDisposable
|
||||
|
||||
''' <summary>
|
||||
''' 当前App所属服务索引
|
||||
''' </summary>
|
||||
''' <returns></returns>
|
||||
Public ReadOnly Property ServiceIndex As Integer
|
||||
|
||||
''' <summary>
|
||||
''' 当前App名称
|
||||
''' </summary>
|
||||
''' <returns></returns>
|
||||
Public ReadOnly Property AppName As String
|
||||
|
||||
''' <summary>
|
||||
''' 当前App版本
|
||||
''' </summary>
|
||||
''' <returns></returns>
|
||||
Public ReadOnly Property AppVersion As String
|
||||
|
||||
''' <summary>
|
||||
''' 当前App运行信息
|
||||
''' </summary>
|
||||
''' <returns></returns>
|
||||
Public Property AppMsg As String
|
||||
|
||||
''' <summary>
|
||||
''' 当前App状态,默认0为空闲
|
||||
''' </summary>
|
||||
''' <returns></returns>
|
||||
Public Property AppStatus As Integer
|
||||
|
||||
|
||||
Private ReadOnly _logLock As Object = New Object()
|
||||
Private ReadOnly _logQueue As New Queue(Of Dictionary(Of String, String))
|
||||
|
||||
|
||||
Enum LogTypeEnum
|
||||
''' <summary>
|
||||
''' 调试信息
|
||||
''' </summary>
|
||||
Debug
|
||||
|
||||
''' <summary>
|
||||
''' 流程信息
|
||||
''' </summary>
|
||||
Info
|
||||
|
||||
''' <summary>
|
||||
''' 警告信息
|
||||
''' </summary>
|
||||
Warn
|
||||
|
||||
''' <summary>
|
||||
''' 错误信息
|
||||
''' </summary>
|
||||
[Error]
|
||||
|
||||
''' <summary>
|
||||
''' 致命信息
|
||||
''' </summary>
|
||||
Fatal
|
||||
End Enum
|
||||
|
||||
|
||||
Sub New(serviceIndex As Integer, appName As String, appVersion As String)
|
||||
Me.ServiceIndex = serviceIndex
|
||||
Me.AppName = appName
|
||||
Me.AppVersion = appVersion
|
||||
|
||||
InitApp()
|
||||
|
||||
End Sub
|
||||
|
||||
Public Property ProjectName() As String
|
||||
Public Property StationName() As String
|
||||
Public Property TestPlan() As String
|
||||
|
||||
Private Sub InitApp()
|
||||
If AppRegistered() Then
|
||||
'更新App版本
|
||||
Try
|
||||
UpdateAppVersion()
|
||||
Catch ex As Exception
|
||||
Throw New Exception($"UpdateAppVersion Error: {ex.Message}")
|
||||
End Try
|
||||
Return
|
||||
End If
|
||||
|
||||
Try
|
||||
RegisterApp() '注册App
|
||||
Catch ex As Exception
|
||||
Throw New Exception($"RegisterApp Error: {ex.Message}")
|
||||
End Try
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
Private Function AppRegistered() As Boolean
|
||||
Dim result As Integer
|
||||
|
||||
Dim colName As String = $"count(*)"
|
||||
Dim tableName As String = $"{AppListTable.TableName}"
|
||||
Dim condition As String = $"`{AppListTable.ColNamesEnum.ServiceID}` = {ServiceIndex} and
|
||||
`{AppListTable.ColNamesEnum.AppName}` = '{AppName}'"
|
||||
|
||||
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
|
||||
db.Open()
|
||||
|
||||
Dim cmdText As String = db.CmdHelper.Search(colName, tableName, condition)
|
||||
result = CInt(db.ExecuteScalar(cmdText))
|
||||
|
||||
db.Close()
|
||||
End Using
|
||||
|
||||
Return result > 0
|
||||
End Function
|
||||
|
||||
|
||||
Private Sub RegisterApp()
|
||||
Dim tableName As String = AppListTable.TableName
|
||||
Dim filed As New Dictionary(Of String, String) From {
|
||||
{$"{AppListTable.ColNamesEnum.ServiceID}", ServiceIndex.ToString()},
|
||||
{$"{AppListTable.ColNamesEnum.AppName}", AppName},
|
||||
{$"{AppListTable.ColNamesEnum.AppVersion}", AppVersion},
|
||||
{$"{AppListTable.ColNamesEnum.RegisterDateTime}", Now.ToString("yyyy-MM-dd HH:mm:ss")},
|
||||
{$"{AppListTable.ColNamesEnum.LastActiveDateTime}", Now.ToString("yyyy-MM-dd HH:mm:ss")}
|
||||
}
|
||||
|
||||
Dim saved As Boolean
|
||||
Dim cmdText As String
|
||||
|
||||
Try
|
||||
'远程注册App
|
||||
Using db As New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString)
|
||||
db.Open()
|
||||
|
||||
cmdText = $"call `uts_manage`.`RegisterApp` ({ServiceIndex},'{AppName}','{AppVersion}','{Now:yyyy-MM-dd HH:mm:ss}')"
|
||||
|
||||
db.ExecuteNonQuery(cmdText)
|
||||
|
||||
db.Close()
|
||||
End Using
|
||||
|
||||
saved = True
|
||||
Catch ex As Exception
|
||||
saved = False
|
||||
Console.WriteLine("Register Remote App Error:" & ex.Message)
|
||||
End Try
|
||||
|
||||
|
||||
'本地注册App
|
||||
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
|
||||
db.Open()
|
||||
|
||||
cmdText = db.CmdHelper.Insert(tableName, filed)
|
||||
db.ExecuteNonQuery(cmdText)
|
||||
|
||||
If saved = False Then
|
||||
cmdText = $"call `uts_manage`.`RegisterApp` ({ServiceIndex},'{AppName}','{AppVersion}','{Now:yyyy-MM-dd HH:mm:ss}')"
|
||||
DbConnector.SaveCmdStringToCacheTable(db, cmdText)
|
||||
End If
|
||||
|
||||
db.Close()
|
||||
End Using
|
||||
End Sub
|
||||
|
||||
Private Sub UpdateAppVersion()
|
||||
Dim tableName As String = AppListTable.TableName
|
||||
Dim filed As New Dictionary(Of String, String) From {
|
||||
{$"{AppListTable.ColNamesEnum.AppVersion}", AppVersion},
|
||||
{$"{AppListTable.ColNamesEnum.LastActiveDateTime}", Now.ToString("yyyy-MM-dd HH:mm:ss")}
|
||||
}
|
||||
Dim condition As String = $"`{AppListTable.ColNamesEnum.ServiceID}` = {ServiceIndex} and `{AppListTable.ColNamesEnum.AppName}` = '{AppName}'"
|
||||
|
||||
Dim saved As Boolean
|
||||
Dim cmdText As String
|
||||
|
||||
Try
|
||||
'远程更新App版本
|
||||
Using db As New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString)
|
||||
cmdText = db.CmdHelper.DbUpdate(UtsDb.RemotePublicDb, tableName, filed, condition)
|
||||
|
||||
db.Open()
|
||||
|
||||
db.ExecuteNonQuery(cmdText)
|
||||
|
||||
db.Close()
|
||||
End Using
|
||||
saved = True
|
||||
Catch ex As Exception
|
||||
saved = False
|
||||
Console.WriteLine("Update Remote AppVersion Error:" & ex.Message)
|
||||
End Try
|
||||
|
||||
|
||||
'本地更新App版本
|
||||
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
|
||||
db.Open()
|
||||
|
||||
cmdText = db.CmdHelper.Update(tableName, filed, condition)
|
||||
db.ExecuteNonQuery(cmdText)
|
||||
|
||||
'保存至缓冲队列
|
||||
If saved = False Then
|
||||
cmdText = New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString).CmdHelper.DbUpdate(UtsDb.RemotePublicDb, tableName, filed, condition)
|
||||
DbConnector.SaveCmdStringToCacheTable(db, cmdText)
|
||||
End If
|
||||
|
||||
db.Close()
|
||||
End Using
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' 定期更新APP的活动时间,调用则会定期基于本地调用存储过程至缓存表
|
||||
''' </summary>
|
||||
Public Sub UpdateAliveTime()
|
||||
Dim sb As New StringBuilder
|
||||
sb.Append($"update `{UtsDb.RemotePublicDb}`.`{AppListTable.TableName}` set ")
|
||||
sb.Append($"`{AppListTable.ColNamesEnum.AppVersion}` = '{AppVersion}' ")
|
||||
sb.Append($",`{AppListTable.ColNamesEnum.LastActiveDateTime}` = current_timestamp() ")
|
||||
If String.IsNullOrEmpty(AppMsg) = False Then
|
||||
Select Case AppStatus
|
||||
Case 0 '空闲状态
|
||||
sb.Append($",`{AppListTable.ColNamesEnum.LastInfomation}` = '{AppMsg},Status:Idle' ")
|
||||
Case 1 '测试中
|
||||
sb.Append($",`{AppListTable.ColNamesEnum.LastInfomation}` = '{AppMsg},Status:Testing'")
|
||||
End Select
|
||||
End If
|
||||
|
||||
sb.Append($"where `{AppListTable.ColNamesEnum.ServiceID}` = {ServiceIndex} ")
|
||||
sb.Append($"and `{AppListTable.ColNamesEnum.AppName}` = '{AppName}' ")
|
||||
|
||||
Try
|
||||
Using db As New DbExecutor(UtsDb.RemoteDbType, UtsDb.RemoteConnString)
|
||||
db.Open()
|
||||
|
||||
db.ExecuteNonQuery(sb.ToString)
|
||||
|
||||
db.Close()
|
||||
End Using
|
||||
Catch ex As Exception
|
||||
Console.WriteLine($"Update AppInfo Error:{ex.Message}")
|
||||
End Try
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
Public Shared Sub CreateAppLogTable()
|
||||
Try
|
||||
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
|
||||
db.Open()
|
||||
|
||||
Dim cmdText As String = AppLogTable.CreateTableString("", DbExecutor.DbTypeEnum.Sqlite)
|
||||
|
||||
db.ExecuteNonQuery(cmdText)
|
||||
|
||||
db.Close()
|
||||
End Using
|
||||
|
||||
Catch ex As Exception
|
||||
Throw New Exception($"CreateAppLogTable Error:{ex.Message}")
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
|
||||
Public Shared Sub CreateAppListTable()
|
||||
Try
|
||||
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
|
||||
db.Open()
|
||||
|
||||
Dim cmdText As String = AppListTable.CreateTableString("", DbExecutor.DbTypeEnum.Sqlite)
|
||||
|
||||
db.ExecuteNonQuery(cmdText)
|
||||
|
||||
db.Close()
|
||||
End Using
|
||||
|
||||
Catch ex As Exception
|
||||
Throw New Exception($"CreateAppListTable Error:{ex.Message}")
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
|
||||
Public Sub AppendDebugLog(logText As String)
|
||||
AppendLogToLogQueue(LogTypeEnum.Debug, logText)
|
||||
End Sub
|
||||
|
||||
Public Sub AppendTraceLog(logText As String)
|
||||
AppendLogToLogQueue(LogTypeEnum.Info, logText)
|
||||
End Sub
|
||||
|
||||
Public Sub AppendWarningLog(logText As String)
|
||||
AppendLogToLogQueue(LogTypeEnum.Warn, logText)
|
||||
End Sub
|
||||
|
||||
Public Sub AppendErrorLog(logText As String)
|
||||
AppendLogToLogQueue(LogTypeEnum.Error, logText)
|
||||
End Sub
|
||||
|
||||
Public Sub AppendFatalLog(logText As String)
|
||||
AppendLogToLogQueue(LogTypeEnum.Fatal, logText)
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' 添加日志内容至缓存的日志队列中
|
||||
''' 调用SaveLogQueueToDb将队列中的数据写入到数据库
|
||||
'''
|
||||
''' Tip:缓存队列仅记录每条日志不同的内容,例如写入时间,日志类型,日志内容等
|
||||
''' </summary>
|
||||
''' <param name="logType"></param>
|
||||
''' <param name="logText"></param>
|
||||
Public Sub AppendLogToLogQueue(logType As LogTypeEnum, logText As String)
|
||||
Dim dicFiled As New Dictionary(Of String, String)
|
||||
|
||||
dicFiled.Add($"{AppLogTable.ColNamesEnum.DateTime}", $"{Now:yyyy-MM-dd HH:mm:ss}")
|
||||
|
||||
dicFiled.Add($"{AppLogTable.ColNamesEnum.LogType}", $"{logType}")
|
||||
dicFiled.Add($"{AppLogTable.ColNamesEnum.LogText}", $"{logText}")
|
||||
|
||||
SyncLock _logLock
|
||||
_logQueue.Enqueue(dicFiled) '将日志信息放入缓冲队列
|
||||
End SyncLock
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
Public Sub SaveLogQueueToDb()
|
||||
If _logQueue.Count <= 0 Then Return
|
||||
|
||||
Dim tableName As String = AppLogTable.TableName
|
||||
|
||||
Using db As New DbExecutor(UtsDb.LocalDbType, UtsDb.LocalConnString)
|
||||
db.Open()
|
||||
|
||||
db.BeginTransaction()
|
||||
|
||||
Dim dicFiled As Dictionary(Of String, String)
|
||||
Dim cmdText As String
|
||||
Dim cmdHelper As DbCmdHelper = DbCmdHelper.CreateCmdHelper(UtsDb.RemoteDbType)
|
||||
|
||||
SyncLock _logLock
|
||||
While _logQueue.Count > 0
|
||||
dicFiled = _logQueue.Dequeue()
|
||||
|
||||
dicFiled.Add($"{AppLogTable.ColNamesEnum.ServiceID}", $"{ServiceIndex}")
|
||||
dicFiled.Add($"{AppLogTable.ColNamesEnum.AppName}", $"{AppName}")
|
||||
dicFiled.Add($"{AppLogTable.ColNamesEnum.AppVersion}", $"{AppVersion}")
|
||||
|
||||
dicFiled.Add($"{AppLogTable.ColNamesEnum.ProjectName}", $"{ProjectName}")
|
||||
dicFiled.Add($"{AppLogTable.ColNamesEnum.StationName}", $"{StationName}")
|
||||
dicFiled.Add($"{AppLogTable.ColNamesEnum.TestPlan}", $"{TestPlan}")
|
||||
|
||||
Try
|
||||
cmdText = db.CmdHelper.Insert(tableName, dicFiled)
|
||||
db.ExecuteNonQuery(cmdText) '执行语句
|
||||
Catch ex As Exception
|
||||
Console.WriteLine($"Write LogQueue To Local DB Error: {ex.Message}")
|
||||
Continue While
|
||||
End Try
|
||||
|
||||
|
||||
Try
|
||||
cmdText = cmdHelper.DbInsert(UtsDb.RemotePublicDb, tableName, dicFiled)
|
||||
DbConnector.SaveCmdStringToCacheTable(db, cmdText) '执行命令入缓存库
|
||||
Catch ex As Exception
|
||||
Console.WriteLine($"Write LogQueue To Chche DB Error: {ex.Message}")
|
||||
Continue While
|
||||
End Try
|
||||
End While
|
||||
End SyncLock
|
||||
|
||||
db.CommitTransaction()
|
||||
db.Close()
|
||||
End Using
|
||||
End Sub
|
||||
|
||||
|
||||
|
||||
|
||||
Public Sub Dispose() Implements IDisposable.Dispose
|
||||
|
||||
|
||||
End Sub
|
||||
End Class
|
||||
End Namespace
|
||||
Reference in New Issue
Block a user