Skip to content

Commit

Permalink
Parempi vihje, jos massaluovutuskysely epäonnistui liian isoon tulost…
Browse files Browse the repository at this point in the history
…iedostoon
  • Loading branch information
ilkkahanninen committed Oct 21, 2024
1 parent e661665 commit 9687eaf
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ trait MassaluovutusQueryParameters {
def priority: Int = MassaluovutusQueryPriority.normal
}

trait PartitionSupport {
def partitionFormats: Seq[String]
}

object MassaluovutusQueryPriority {
val highest = 1
val high = 3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ object QueryResponse {
startedAt = q.startedAt,
finishedAt = q.finishedAt,
files = q.filesToExternal(rootUrl),
hint = failedQueryHint(q),
hint = failedQueryHint(q, rootUrl),
error = if (session.hasGlobalReadAccess) Some(q.error) else None,
)
case q: CompleteQuery => CompleteQueryResponse(
Expand All @@ -197,9 +197,19 @@ object QueryResponse {
implicit def toOffsetDateTime(dt: Option[LocalDateTime]): Option[OffsetDateTime] =
dt.map(toOffsetDateTime)

def failedQueryHint(q: FailedQuery): Option[String] =
def failedQueryHint(q: FailedQuery, rootUrl: String): Option[String] =
if (q.error.contains("Your proposed upload exceeds the maximum allowed size")) {
Some("Kyselystä syntyneen tulostiedoston koko kasvoi liian suureksi. Pienennä tulosjoukon kokoa esimerkiksi rajaamalla kysely lyhyemmälle aikavälille tai käytä ositettuja tulostiedostoja, jos kysely tukee sitä.")
val suggestions = (
List("rajaa kysely lyhyemmälle aikavälille") ++
(q.query match {
case p: PartitionSupport =>
val formats = p.partitionFormats.mkString(" tai ")
val helpUrl = s"$rootUrl/dokumentaatio/rajapinnat/massaluovutus/koulutuksenjarjestajat"
List(s"käytä tulostiedostojen ositusta asettalla format-kenttään $formats (kts. tarkemmat ohjeet $helpUrl)")
case _ => List()
})
).mkString("; ")
Some(s"Kyselystä syntyneen tulostiedoston koko kasvoi liian suureksi. Ehdotuksia kyselyn korjaamiseksi: $suggestions")
} else {
None
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import fi.oph.koski.config.KoskiApplication
import fi.oph.koski.koskiuser.KoskiSpecificSession
import fi.oph.koski.organisaatio.MockOrganisaatiot
import fi.oph.koski.massaluovutus.MassaluovutusUtils.QueryResourceManager
import fi.oph.koski.massaluovutus.{CsvStream, QueryFormat, QueryResultWriter}
import fi.oph.koski.massaluovutus.{CsvStream, PartitionSupport, QueryFormat, QueryResultWriter}
import fi.oph.koski.raportointikanta._
import fi.oph.koski.schema.Organisaatio
import fi.oph.koski.schema.Organisaatio.Oid
Expand Down Expand Up @@ -43,7 +43,8 @@ case class MassaluovutusQueryOrganisaationOpiskeluoikeudetCsv(
eiOsasuorituksia: Option[Boolean] = None,
@Description("Jos true, ei kyselyllä luoda opiskeluoikeuden aikajaksotiedostoja")
eiAikajaksoja: Option[Boolean] = None,
) extends MassaluovutusQueryOrganisaationOpiskeluoikeudet {
) extends MassaluovutusQueryOrganisaationOpiskeluoikeudet with PartitionSupport {
def partitionFormats: Seq[String] = Seq(QueryFormat.csvPartition)

def withOrganisaatioOid(organisaatioOid: Oid): MassaluovutusQueryOrganisaationOpiskeluoikeudetCsv = copy(organisaatioOid = Some(organisaatioOid))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ class MassaluovutusSpec extends AnyFreeSpec with KoskiHttpSpec with Matchers wit
KoskiApplicationForTests.massaluovutusService.addRaw(failedQuery)
getQuerySuccessfully(failedQuery.queryId, MockUsers.tornioTallentaja) { response =>
val failResponse = response.asInstanceOf[FailedQueryResponse]
failResponse.hint should equal(Some("Kyselystä syntyneen tulostiedoston koko kasvoi liian suureksi. Pienennä tulosjoukon kokoa esimerkiksi rajaamalla kysely lyhyemmälle aikavälille tai käytä ositettuja tulostiedostoja, jos kysely tukee sitä."))
failResponse.hint should equal(Some("Kyselystä syntyneen tulostiedoston koko kasvoi liian suureksi. Ehdotuksia kyselyn korjaamiseksi: rajaa kysely lyhyemmälle aikavälille; käytä tulostiedostojen ositusta asettalla format-kenttään text/x-csv-partition (kts. tarkemmat ohjeet http://localhost:7021/koski/dokumentaatio/rajapinnat/massaluovutus/koulutuksenjarjestajat)"))
failResponse.error should equal(None)
}
}
Expand Down

0 comments on commit 9687eaf

Please sign in to comment.