commit 10/09/2025
This commit is contained in:
@@ -32,14 +32,14 @@ fun main() {
|
||||
CoroutineScope(Dispatchers.Default).launch {
|
||||
while (isActive) {
|
||||
delay(1000)
|
||||
val broadcastzones = db.GetBroadcastZones()
|
||||
|
||||
// baca dulu queue paging, prioritas 1
|
||||
db.Read_Queue_Paging().forEach {
|
||||
// cek apakah queue paging ada broadcast zone nya
|
||||
if (it.BroadcastZones.isNotBlank()) {
|
||||
val zz = it.BroadcastZones.split(";")
|
||||
// cek apakah semua target broadcast zone dari queue paging ada di dalam database broadcast zones
|
||||
if (zz.all { z -> broadcastzones.any { bz -> bz.equals(z) } }) {
|
||||
if (zz.all { z -> db.BroadcastZoneList.any { bz -> bz.equals(z) } }) {
|
||||
// semua target broadcast zone valid, sekarang cek apakah semua target broadcast zone idle
|
||||
|
||||
} else {
|
||||
@@ -59,7 +59,7 @@ fun main() {
|
||||
if (it.BroadcastZones.isNotBlank()) {
|
||||
val zz = it.BroadcastZones.split(";")
|
||||
// cek apakah semua target broadcast zone dari queue table ada di dalam database broadcast zones
|
||||
if (zz.all { z -> broadcastzones.any { bz -> bz.equals(z) } }) {
|
||||
if (zz.all { z -> db.BroadcastZoneList.any { bz -> bz.equals(z) } }) {
|
||||
// semua target broadcast zone valid, sekarang cek apakah semua target broadcast zone idle
|
||||
|
||||
} else {
|
||||
|
||||
@@ -24,6 +24,7 @@ class Somecodes {
|
||||
val memory : GlobalMemory = si.hardware.memory
|
||||
val datetimeformat1: DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")
|
||||
val dateformat1: DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy")
|
||||
val dateformat2: DateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
|
||||
val timeformat1: DateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm:ss")
|
||||
val timeformat2: DateTimeFormatter = DateTimeFormatter.ofPattern("hh:mm")
|
||||
const val KB_threshold = 1024.0
|
||||
@@ -180,6 +181,24 @@ class Somecodes {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a string is a valid date in the format "dd-MM-yyyy".
|
||||
* This format is used for log HTML files.
|
||||
* @param value The string to check.
|
||||
* @return True if the string is a valid date, false otherwise.
|
||||
*/
|
||||
fun ValiDateForLogHtml(value: String): Boolean{
|
||||
return try{
|
||||
if (ValidString(value)){
|
||||
dateformat2.parse(value)
|
||||
true
|
||||
} else throw Exception()
|
||||
|
||||
} catch (_: Exception){
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a string is a valid time in the format "hh:mm:ss".
|
||||
* @param value The string to check.
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package database
|
||||
|
||||
import codes.Somecodes.Companion.ValiDateForLogHtml
|
||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook
|
||||
import org.mariadb.jdbc.Connection
|
||||
import org.tinylog.Logger
|
||||
import java.sql.Connection
|
||||
import java.sql.DriverManager
|
||||
import java.util.function.Consumer
|
||||
|
||||
@@ -33,6 +34,7 @@ class MariaDB(
|
||||
var MessagebankList: ArrayList<Messagebank> = ArrayList()
|
||||
var LanguageLinkList: ArrayList<LanguageLink> = ArrayList()
|
||||
var SchedulebankList: ArrayList<ScheduleBank> = ArrayList()
|
||||
var BroadcastZoneList: ArrayList<BroadcastZones> = ArrayList()
|
||||
|
||||
companion object {
|
||||
fun ValidDate(date: String): Boolean {
|
||||
@@ -56,7 +58,7 @@ class MariaDB(
|
||||
*/
|
||||
fun <T> ArrayListtoString(list: ArrayList<T>): String {
|
||||
return try {
|
||||
objectMapper.writeValueAsString(list.toArray())
|
||||
objectMapper.writeValueAsString(list)
|
||||
} catch (e: Exception) {
|
||||
Logger.error("Error converting list to JSON: ${e.message}" as Any)
|
||||
"[]"
|
||||
@@ -68,7 +70,7 @@ class MariaDB(
|
||||
init {
|
||||
try {
|
||||
connection =
|
||||
DriverManager.getConnection("jdbc:mariadb://$address:$port/$dbName", username, password) as Connection
|
||||
DriverManager.getConnection("jdbc:mysql://$address:$port/$dbName?sslMode=REQUIRED", username, password) as Connection
|
||||
Logger.info("Connected to MariaDB" as Any)
|
||||
connected = true
|
||||
|
||||
@@ -78,6 +80,7 @@ class MariaDB(
|
||||
Reload_Soundbank()
|
||||
Reload_LanguageLink()
|
||||
Reload_Schedulebank()
|
||||
GetBroadcastZones()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,6 +91,7 @@ class MariaDB(
|
||||
Logger.info { "Messagebank count: ${MessagebankList.size}" }
|
||||
Logger.info { "LanguageLink count: ${LanguageLinkList.size}" }
|
||||
Logger.info { "Schedulebank count: ${SchedulebankList.size}" }
|
||||
Logger.info { "BroadcastZones count: ${BroadcastZoneList.size}" }
|
||||
|
||||
|
||||
} catch (e: Exception) {
|
||||
@@ -195,7 +199,7 @@ class MariaDB(
|
||||
val logList = ArrayList<Log>()
|
||||
try {
|
||||
val statement = connection?.createStatement()
|
||||
val resultSet = statement?.executeQuery("SELECT * FROM log")
|
||||
val resultSet = statement?.executeQuery("SELECT * FROM logs")
|
||||
while (resultSet?.next() == true) {
|
||||
val log = Log(
|
||||
resultSet.getLong("index").toULong(),
|
||||
@@ -213,16 +217,18 @@ class MariaDB(
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Log from database by date
|
||||
* @param date The date to filter logs by (format: DD/MM/YYYY)
|
||||
* Get Log from database by date for HTML usage
|
||||
* @param date The date to filter logs by (format: DD-MM-YYYY)
|
||||
* @param consumer A Consumer that will receive the list of logs for the specified date
|
||||
*/
|
||||
fun GetLog(date: String, consumer: Consumer<ArrayList<Log>>) {
|
||||
fun GetLogForHtml(date: String, consumer: Consumer<ArrayList<Log>>) {
|
||||
val logList = ArrayList<Log>()
|
||||
if (ValidDate(date)) {
|
||||
if (ValiDateForLogHtml(date)) {
|
||||
try {
|
||||
val statement = connection?.prepareStatement("SELECT * FROM log WHERE datenya = ?")
|
||||
statement?.setString(1, date)
|
||||
// must convert from DD-MM-YYYY to DD/MM/YYYY, because in database we use DD/MM/YYYY
|
||||
val adjusteddate = date.replace("-", "/")
|
||||
val statement = connection?.prepareStatement("SELECT * FROM logs WHERE datenya = ?")
|
||||
statement?.setString(1, adjusteddate)
|
||||
val resultSet = statement?.executeQuery()
|
||||
while (resultSet?.next() == true) {
|
||||
val log = Log(
|
||||
@@ -242,13 +248,21 @@ class MariaDB(
|
||||
consumer.accept(logList)
|
||||
}
|
||||
|
||||
fun GetLog(date: String, filter: String, consumer: Consumer<ArrayList<Log>>) {
|
||||
/**
|
||||
* Get Log from database by date and filter for HTML usage
|
||||
* @param date The date to filter logs by (format: DD-MM-YYYY)
|
||||
* @param filter The filter string to search in description or machine
|
||||
* @param consumer A Consumer that will receive the list of logs for the specified date and filter
|
||||
*/
|
||||
fun GetLogForHtml(date: String, filter: String, consumer: Consumer<ArrayList<Log>>) {
|
||||
val logList = ArrayList<Log>()
|
||||
if (ValidDate(date)) {
|
||||
if (ValiDateForLogHtml(date)) {
|
||||
try {
|
||||
// must convert from DD-MM-YYYY to DD/MM/YYYY, because in database we use DD/MM/YYYY
|
||||
val adjusteddate = date.replace("-", "/")
|
||||
val statement =
|
||||
connection?.prepareStatement("SELECT * FROM log WHERE datenya = ? AND description LIKE ?")
|
||||
statement?.setString(1, date)
|
||||
connection?.prepareStatement("SELECT * FROM logs WHERE datenya = ? AND description LIKE ?")
|
||||
statement?.setString(1, adjusteddate)
|
||||
statement?.setString(2, "%$filter%")
|
||||
val resultSet = statement?.executeQuery()
|
||||
while (resultSet?.next() == true) {
|
||||
@@ -559,7 +573,7 @@ class MariaDB(
|
||||
LanguageLinkList.clear()
|
||||
try {
|
||||
val statement = connection?.createStatement()
|
||||
val resultSet = statement?.executeQuery("SELECT * FROM languagelink")
|
||||
val resultSet = statement?.executeQuery("SELECT * FROM languagelinking")
|
||||
while (resultSet?.next() == true) {
|
||||
val languageLink = LanguageLink(
|
||||
resultSet.getLong("index").toUInt(),
|
||||
@@ -1378,11 +1392,11 @@ class MariaDB(
|
||||
* Get All Broadcast Zones from database
|
||||
* @return A list of BroadcastZones entries.
|
||||
*/
|
||||
fun GetBroadcastZones(): List<BroadcastZones> {
|
||||
val zonesList = ArrayList<BroadcastZones>()
|
||||
fun GetBroadcastZones(){
|
||||
BroadcastZoneList.clear()
|
||||
try {
|
||||
val statement = connection?.createStatement()
|
||||
val resultSet = statement?.executeQuery("SELECT * FROM broadcast_zones")
|
||||
val resultSet = statement?.executeQuery("SELECT * FROM broadcastzones")
|
||||
while (resultSet?.next() == true) {
|
||||
val zone = BroadcastZones(
|
||||
resultSet.getLong("index").toUInt(),
|
||||
@@ -1391,12 +1405,11 @@ class MariaDB(
|
||||
resultSet.getString("Box"),
|
||||
resultSet.getString("Relay")
|
||||
)
|
||||
zonesList.add(zone)
|
||||
BroadcastZoneList.add(zone)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Logger.error("Error fetching broadcast zones: ${e.message}" as Any)
|
||||
}
|
||||
return zonesList
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,6 +2,7 @@ package web
|
||||
|
||||
import codes.Somecodes
|
||||
import codes.Somecodes.Companion.ListAudioFiles
|
||||
import codes.Somecodes.Companion.ValiDateForLogHtml
|
||||
import codes.Somecodes.Companion.ValidDate
|
||||
import codes.Somecodes.Companion.ValidFile
|
||||
import codes.Somecodes.Companion.ValidScheduleDay
|
||||
@@ -123,11 +124,11 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
|
||||
}
|
||||
|
||||
"getPagingQueue" ->{
|
||||
SendReply(wsMessageContext, cmd.command, MariaDB.ArrayListtoString(db.Read_Queue_Paging()))
|
||||
SendReply(wsMessageContext, cmd.command, objectmapper.writeValueAsString(db.Read_Queue_Paging()))
|
||||
}
|
||||
|
||||
"getAASQueue" ->{
|
||||
SendReply(wsMessageContext, cmd.command, MariaDB.ArrayListtoString(db.Read_Queue_Table()))
|
||||
SendReply(wsMessageContext, cmd.command, objectmapper.writeValueAsString(db.Read_Queue_Table()))
|
||||
}
|
||||
|
||||
else -> {
|
||||
@@ -187,7 +188,6 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
|
||||
}
|
||||
path("SoundBank") {
|
||||
get("List") {
|
||||
// get soundbank list
|
||||
it.result(MariaDB.ArrayListtoString(db.SoundbankList))
|
||||
}
|
||||
get("ListFiles"){
|
||||
@@ -719,21 +719,24 @@ class WebApp(val listenPort: Int, val userlist: List<Pair<String, String>>, val
|
||||
}
|
||||
}
|
||||
path("Log") {
|
||||
get("List/<logdate>/<logfilter>") { get1 ->
|
||||
val logdate = get1.pathParam("logdate")
|
||||
val logfilter = get1.pathParam("logfilter")
|
||||
if (ValidDate(logdate)) {
|
||||
get("List") { get1 ->
|
||||
val logdate = get1.queryParam("date") ?: ""
|
||||
val logfilter = get1.queryParam("filter") ?: ""
|
||||
if (ValiDateForLogHtml(logdate)) {
|
||||
if (ValidString(logfilter)) {
|
||||
// ada log filter
|
||||
db.GetLog(logdate, logfilter) {
|
||||
db.GetLogForHtml(logdate, logfilter) {
|
||||
get1.result(MariaDB.ArrayListtoString(it))
|
||||
}
|
||||
} else {
|
||||
db.GetLog(logdate) {
|
||||
db.GetLogForHtml(logdate) {
|
||||
get1.result(MariaDB.ArrayListtoString(it))
|
||||
}
|
||||
}
|
||||
} else get1.status(400).result("Invalid logdate")
|
||||
} else {
|
||||
println("Invalid logdate=$logdate")
|
||||
get1.status(400).result("Invalid logdate")
|
||||
}
|
||||
}
|
||||
get("ExportXLSX/<logdate>/<logfilter>") { get1 ->
|
||||
val logdate = get1.pathParam("logdate")
|
||||
|
||||
Reference in New Issue
Block a user