fix(api): missing metrics if library name contains specific characters

use library ID instead of name for metrics tags

Closes: #1156
This commit is contained in:
Gauthier Roebroeck 2023-07-12 14:15:42 +08:00
parent a2f0c3dabd
commit 5ec7fa180e
7 changed files with 28 additions and 32 deletions

View file

@ -44,7 +44,7 @@ interface BookRepository {
fun deleteAll()
fun count(): Long
fun countGroupedByLibraryName(): Map<String, Int>
fun countGroupedByLibraryId(): Map<String, Int>
fun getFilesizeGroupedByLibraryName(): Map<String, BigDecimal>
fun getFilesizeGroupedByLibraryId(): Map<String, BigDecimal>
}

View file

@ -26,5 +26,5 @@ interface SeriesRepository {
fun deleteAll()
fun count(): Long
fun countGroupedByLibraryName(): Map<String, Int>
fun countGroupedByLibraryId(): Map<String, Int>
}

View file

@ -12,5 +12,5 @@ interface SidecarRepository {
fun deleteByLibraryIdAndUrls(libraryId: String, urls: Collection<URL>)
fun deleteByLibraryId(libraryId: String)
fun countGroupedByLibraryName(): Map<String, Int>
fun countGroupedByLibraryId(): Map<String, Int>
}

View file

@ -316,19 +316,17 @@ class BookDao(
override fun count(): Long = dsl.fetchCount(b).toLong()
override fun countGroupedByLibraryName(): Map<String, Int> =
dsl.select(l.NAME, DSL.count(b.ID))
.from(l)
.leftJoin(b).on(l.ID.eq(b.LIBRARY_ID))
.groupBy(l.NAME)
.fetchMap(l.NAME, DSL.count(b.ID))
override fun countGroupedByLibraryId(): Map<String, Int> =
dsl.select(b.LIBRARY_ID, DSL.count(b.ID))
.from(b)
.groupBy(b.LIBRARY_ID)
.fetchMap(b.LIBRARY_ID, DSL.count(b.ID))
override fun getFilesizeGroupedByLibraryName(): Map<String, BigDecimal> =
dsl.select(l.NAME, DSL.sum(b.FILE_SIZE))
.from(l)
.leftJoin(b).on(l.ID.eq(b.LIBRARY_ID))
.groupBy(l.NAME)
.fetchMap(l.NAME, DSL.sum(b.FILE_SIZE))
override fun getFilesizeGroupedByLibraryId(): Map<String, BigDecimal> =
dsl.select(b.LIBRARY_ID, DSL.sum(b.FILE_SIZE))
.from(b)
.groupBy(b.LIBRARY_ID)
.fetchMap(b.LIBRARY_ID, DSL.sum(b.FILE_SIZE))
private fun BookSearch.toCondition(): Condition {
var c: Condition = DSL.trueCondition()

View file

@ -137,12 +137,11 @@ class SeriesDao(
override fun count(): Long = dsl.fetchCount(s).toLong()
override fun countGroupedByLibraryName(): Map<String, Int> =
dsl.select(l.NAME, DSL.count(s.ID))
.from(l)
.leftJoin(s).on(l.ID.eq(s.LIBRARY_ID))
.groupBy(l.NAME)
.fetchMap(l.NAME, DSL.count(s.ID))
override fun countGroupedByLibraryId(): Map<String, Int> =
dsl.select(s.LIBRARY_ID, DSL.count(s.ID))
.from(s)
.groupBy(s.LIBRARY_ID)
.fetchMap(s.LIBRARY_ID, DSL.count(s.ID))
private fun SeriesSearch.toCondition(): Condition {
var c: Condition = DSL.trueCondition()

View file

@ -54,12 +54,11 @@ class SidecarDao(
.execute()
}
override fun countGroupedByLibraryName(): Map<String, Int> =
dsl.select(l.NAME, DSL.count(sc.URL))
.from(l)
.leftJoin(sc).on(l.ID.eq(sc.LIBRARY_ID))
.groupBy(l.NAME)
.fetchMap(l.NAME, DSL.count(sc.URL))
override fun countGroupedByLibraryId(): Map<String, Int> =
dsl.select(sc.LIBRARY_ID, DSL.count(sc.URL))
.from(sc)
.groupBy(sc.LIBRARY_ID)
.fetchMap(sc.LIBRARY_ID, DSL.count(sc.URL))
private fun SidecarRecord.toDomain() =
SidecarStored(

View file

@ -114,10 +114,10 @@ class MetricsPublisherController(
COLLECTIONS -> noTagGauges[COLLECTIONS]?.set(collectionRepository.count())
READLISTS -> noTagGauges[READLISTS]?.set(readListRepository.count())
SERIES -> multiGauges[SERIES]?.register(seriesRepository.countGroupedByLibraryName().map { Row.of(Tags.of("library", it.key), it.value) })
BOOKS -> multiGauges[BOOKS]?.register(bookRepository.countGroupedByLibraryName().map { Row.of(Tags.of("library", it.key), it.value) })
BOOKS_FILESIZE -> bookFileSizeGauge.register(bookRepository.getFilesizeGroupedByLibraryName().map { Row.of(Tags.of("library", it.key), it.value) })
SIDECARS -> multiGauges[SIDECARS]?.register(sidecarRepository.countGroupedByLibraryName().map { Row.of(Tags.of("library", it.key), it.value) })
SERIES -> multiGauges[SERIES]?.register(seriesRepository.countGroupedByLibraryId().map { Row.of(Tags.of("library", it.key), it.value) })
BOOKS -> multiGauges[BOOKS]?.register(bookRepository.countGroupedByLibraryId().map { Row.of(Tags.of("library", it.key), it.value) })
BOOKS_FILESIZE -> bookFileSizeGauge.register(bookRepository.getFilesizeGroupedByLibraryId().map { Row.of(Tags.of("library", it.key), it.value) })
SIDECARS -> multiGauges[SIDECARS]?.register(sidecarRepository.countGroupedByLibraryId().map { Row.of(Tags.of("library", it.key), it.value) })
}
}
}