
pt.tecnico.dsi.openstack.nova.services.UsageReports.scala Maven / Gradle / Ivy
package pt.tecnico.dsi.openstack.nova.services
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import cats.effect.Concurrent
import org.http4s.{QueryParamEncoder, Uri}
import org.http4s.client.Client
import pt.tecnico.dsi.openstack.common.services.PartialCrudService
import pt.tecnico.dsi.openstack.keystone.models.Session
import pt.tecnico.dsi.openstack.nova.models.UsageReport
final class UsageReports[F[_]: Concurrent: Client](baseUri: Uri, session: Session) extends PartialCrudService[F](baseUri, "tenant_usage", session.authToken) {
override val uri: Uri = baseUri / "os-simple-tenant-usage"
given QueryParamEncoder[LocalDateTime] =
QueryParamEncoder[String].contramap[LocalDateTime] { (dateTime: LocalDateTime) =>
// https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSS")
formatter.format(dateTime)
}
/**
* Shows the usage report for a project.
*
* @param projectId UUID of the project.
*/
def get(projectId: String, start: Option[LocalDateTime] = None, end: Option[LocalDateTime] = None): F[Option[UsageReport]] =
getOption(wrappedAt, (uri / projectId).withOptionQueryParam("start", start).withOptionQueryParam("end", end))
/**
* Shows the usage report for a project assuming the project exist.
*
* @param projectId UUID of the project.
*/
def apply(projectId: String, start: Option[LocalDateTime] = None, end: Option[LocalDateTime] = None): F[UsageReport] =
super.get(wrappedAt, (uri / projectId).withOptionQueryParam("start", start).withOptionQueryParam("end", end))
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy