diff --git a/src/Main.kt b/src/Main.kt
index 3725bb1..dd7698e 100644
--- a/src/Main.kt
+++ b/src/Main.kt
@@ -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 {
diff --git a/src/codes/Somecodes.kt b/src/codes/Somecodes.kt
index 26a5746..3cd8959 100644
--- a/src/codes/Somecodes.kt
+++ b/src/codes/Somecodes.kt
@@ -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.
diff --git a/src/database/MariaDB.kt b/src/database/MariaDB.kt
index 217ce77..6f0e2e4 100644
--- a/src/database/MariaDB.kt
+++ b/src/database/MariaDB.kt
@@ -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 = ArrayList()
var LanguageLinkList: ArrayList = ArrayList()
var SchedulebankList: ArrayList = ArrayList()
+ var BroadcastZoneList: ArrayList = ArrayList()
companion object {
fun ValidDate(date: String): Boolean {
@@ -56,7 +58,7 @@ class MariaDB(
*/
fun ArrayListtoString(list: ArrayList): 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()
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>) {
+ fun GetLogForHtml(date: String, consumer: Consumer>) {
val logList = ArrayList()
- 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>) {
+ /**
+ * 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>) {
val logList = ArrayList()
- 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 {
- val zonesList = ArrayList()
+ 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
}
/**
diff --git a/src/web/WebApp.kt b/src/web/WebApp.kt
index bb52447..e7afad7 100644
--- a/src/web/WebApp.kt
+++ b/src/web/WebApp.kt
@@ -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>, 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>, 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>, val
}
}
path("Log") {
- get("List//") { 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//") { get1 ->
val logdate = get1.pathParam("logdate")