Skip to content

Commit

Permalink
stats
Browse files Browse the repository at this point in the history
  • Loading branch information
theosanderson committed Feb 24, 2025
1 parent 345218d commit 7eeab32
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.loculus.backend.api

/**
* Response model for pipeline statistics endpoint.
* Shows the count of sequences by organism and pipeline version.
*/
data class PipelineStatisticsResponse(
// Map of organism name to statistics for that organism
val statistics: Map<String, OrganismPipelineStatistics>
)

/**
* Statistics for a specific organism
*/
data class OrganismPipelineStatistics(
// Total number of sequences for this organism
val totalSequences: Int,
// Count of sequences by pipeline version
val sequencesByPipelineVersion: Map<Long, Int>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.loculus.backend.controller

import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.security.SecurityRequirement
import org.loculus.backend.api.PipelineStatisticsResponse
import org.loculus.backend.service.submission.SubmissionDatabaseService
import org.springframework.http.MediaType
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@RequestMapping("/statistics")
@SecurityRequirement(name = "bearerAuth")
class StatisticsController(
private val submissionDatabaseService: SubmissionDatabaseService,
) {
@Operation(
description = "Get statistics on sequences processed by pipeline version for each organism",
)
@GetMapping("/pipeline-versions", produces = [MediaType.APPLICATION_JSON_VALUE])
fun getPipelineStatistics(): PipelineStatisticsResponse {
return PipelineStatisticsResponse(
statistics = submissionDatabaseService.getPipelineStatistics()
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import org.jetbrains.exposed.sql.transactions.transaction
import org.jetbrains.exposed.sql.update
import org.jetbrains.exposed.sql.vendors.ForUpdateOption.PostgreSQL.ForUpdate
import org.jetbrains.exposed.sql.vendors.ForUpdateOption.PostgreSQL.MODE
import org.loculus.backend.api.OrganismPipelineStatistics
import org.loculus.backend.api.AccessionVersion
import org.loculus.backend.api.AccessionVersionInterface
import org.loculus.backend.api.AccessionVersionOriginalMetadata
Expand Down Expand Up @@ -1121,6 +1122,43 @@ class SubmissionDatabaseService(
SequenceEntriesTable.distinctOrganisms().map { organismName ->
Pair(organismName, useNewerProcessingPipelineIfPossible(organismName))
}.toMap()

/**
* Gets statistics on sequences grouped by organism and pipeline version
*/
fun getPipelineStatistics(): Map<String, OrganismPipelineStatistics> {
val statistics = mutableMapOf<String, OrganismPipelineStatistics>()

SequenceEntriesTable.distinctOrganisms().forEach { organismName ->
val organism = Organism(organismName)

// Count total sequences for this organism
val totalSequences = SequenceEntriesView
.select(Count(stringLiteral("*")))
.where { SequenceEntriesView.organismIs(organism) }
.first()[Count(stringLiteral("*"))].toInt()

// Count sequences by pipeline version
val pipelineVersionColumn = SequenceEntriesView.pipelineVersionColumn
val countColumn = Count(stringLiteral("*"))

val pipelineVersionCounts = SequenceEntriesView
.select(pipelineVersionColumn, countColumn)
.where {
SequenceEntriesView.organismIs(organism) and
(pipelineVersionColumn.isNotNull())
}
.groupBy(pipelineVersionColumn)
.associate { it[pipelineVersionColumn]!! to it[countColumn].toInt() }

statistics[organismName] = OrganismPipelineStatistics(
totalSequences = totalSequences,
sequencesByPipelineVersion = pipelineVersionCounts
)
}

return statistics
}

/**
* Looks for new preprocessing pipeline version with [findNewPreprocessingPipelineVersion];
Expand Down

0 comments on commit 7eeab32

Please sign in to comment.