Skip to content

Instantly share code, notes, and snippets.

@mpkocher
Last active February 24, 2017 20:47
Show Gist options
  • Save mpkocher/d6c73137dee5299acd29524eacec121c to your computer and use it in GitHub Desktop.
Save mpkocher/d6c73137dee5299acd29524eacec121c to your computer and use it in GitHub Desktop.
Example of Pbservice2
package com.pacbio.secondary.smrtserver.tools
import java.util.UUID
import akka.actor.ActorSystem
import com.pacbio.secondary.analysis.jobs.JobModels.EngineJob
import com.pacbio.secondary.analysis.reports.ReportModels.Report
import com.pacbio.secondary.smrtlink.models.{DataSetMetaDataSet, DataStoreReportFile}
import com.pacbio.secondary.smrtserver.client.AnalysisServiceAccessLayer
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
/**
* Created by mkocher on 2/24/17.
*/
object PbService2 {
import com.pacbio.common.models.CommonModelImplicits._
def jobSummary(job: EngineJob): String = {
s"Engine Job $job"
}
def printJobSummary(job: EngineJob, asJson: Boolean): EngineJob = {
println(jobSummary(job))
if (asJson) println("Job as JSON")
job
}
def reportSummary(r:Report): String = {
s"report summary for $r"
}
def printReportSummary(r: Report): Report = {
println(reportSummary(r))
r
}
def dataSetSummary(d: DataSetMetaDataSet): String = {
s"Sumary for $d"
}
def printDataSetSummary(d: DataSetMetaDataSet): DataSetMetaDataSet = {
println(dataSetSummary(d))
d
}
/**
* 1. Get Job
* 2. print job summary
* 3. (IF) show report(s)
* 4. (IF) show dataset(s)
*
* @param jobId
* @return
*/
def demo(jobId: Int): Future[String] = {
val host = "smrtlink-beta"
val port = 8081
implicit val actorSystem = ActorSystem("pbservice")
val client = new AnalysisServiceAccessLayer(host, port)
// Commandline Options
val asJson = true
val showReports = true
val showDataSets = true
def getReportsFromJob(job: EngineJob): Future[String] = {
client.getAnalysisJobReports(job.uuid).map { dataStoreReportFiles =>
dataStoreReportFiles.map { dsr =>
client.getAnalysisJobReport(job.uuid, dsr.dataStoreFile.uuid).map(printReportSummary)
}
}.map(_ => "Completed Report Job Summary") // this is kinda cheating. But printReportSummary will handling each report printing
}
def getDataSetsFromJob(job: EngineJob): Future[String] = {
client.getAnalysisJobEntryPoints(job.id).map { dataStoreFiles =>
dataStoreFiles.map { dsFile =>
client.getDataSet(dsFile.datasetUUID).map(printDataSetSummary)
}
}.map(_ => "Completed Job DataSet Job Summary")
}
def reportProcessor(job: EngineJob): Future[String] = if (showReports) getReportsFromJob(job) else Future("Show Reports is disabled")
def dataSetProcessor(job: EngineJob): Future[String] = if (showDataSets) getDataSetsFromJob(job) else Future("Show DataSets is disabled")
for {
job <- client.getAnalysisJob(jobId)
_ <- Future { printJobSummary(job, asJson)}
_ <- reportProcessor(job)
_ <- dataSetProcessor(job)
} yield s"Completed job summary for ${job.id}"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment