backend/app/services/manifest/Manifest.scala (60 lines of code) (raw):
package services.manifest
import commands.IngestFileResult
import extraction.{ExtractionParams, Extractor}
import model._
import model.annotations.WorkspaceMetadata
import model.frontend.email.EmailNeighbours
import model.frontend.{BasicResource, ExtractionFailures, ResourcesForExtractionFailure}
import model.ingestion.{IngestionFile, WorkspaceItemContext, WorkspaceItemUploadContext}
import model.manifest._
import services.manifest.Manifest.WorkCounts
import utils.attempt.{Attempt, Failure}
import java.nio.file.Path
object Manifest {
sealed trait Insertion
case class InsertDirectory(parentUri: Uri, uri: Uri) extends Insertion
case class InsertBlob(file: IngestionFile, blobUri: Uri, parentBlobs: List[Uri], mimeType: MimeType, ingestion: String,
languages: List[String], extractors: Iterable[Extractor], workspace: Option[WorkspaceItemContext]) extends Insertion
case class InsertEmail(email: Email, parent: Uri) extends Insertion
case class WorkCounts(inProgress: Int, outstanding: Int)
}
trait WorkerManifest {
def fetchWork(workerName: String, maxBatchSize: Int, maxCost: Int): Either[Failure, List[WorkItem]]
def releaseLocks(workerName: String): Either[Failure, Unit]
def releaseLocksForTerminatedWorkers(currentWorkerNames: List[String]): Either[Failure, Unit]
def markAsComplete(params: ExtractionParams, blob: Blob, extractor: Extractor): Either[Failure, Unit]
def markExternalAsProcessing(params: ExtractionParams, blob: Blob, extractor: Extractor): Either[Failure, Unit]
def markExternalAsComplete(uri: String, extractorName: String): Either[Failure, Unit]
def logExtractionFailure(blobUri: Uri, extractorName: String, stackTrace: String): Either[Failure, Unit]
def setProgressNote(blobUri: Uri, extractor: Extractor, note: String): Either[Failure, Unit]
def getWorkCounts(): Either[Failure, WorkCounts]
}
trait Manifest extends WorkerManifest {
def setup(): Either[Failure, Unit]
def maxExtractionAttempts: Int = 1
def insert(insertions: Seq[Manifest.Insertion], rootUri: Uri): Either[Failure, Unit]
def insertCollection(uri: String, display: String, createdBy: String): Attempt[Collection]
def getCollections: Attempt[List[Collection]]
def getCollectionsForBlob(blobUri: String): Attempt[Map[Collection, Seq[String]]]
def getWorkspacesForBlob(blobUri: String): Attempt[List[WorkspaceMetadata]]
def getResource(resourceUri: Uri): Either[Failure, BasicResource]
def getIngestions(collection: Uri): Attempt[Seq[Ingestion]]
def getCollection(collection: Uri): Attempt[Collection]
def getIngestionCount(collection: Uri): Attempt[Int]
def getIngestion(uri: Uri): Attempt[Ingestion]
def insertIngestion(collectionUri: Uri, ingestionUri: Uri, display: String, path: Option[Path], languages: List[Language], fixed: Boolean, default: Boolean): Attempt[Uri]
def getFailedExtractions: Either[Failure, ExtractionFailures]
def getResourcesForExtractionFailure(extractor: String, stackTrace: String, page: Long, skip: Long, pageSize: Long): Either[Failure, ResourcesForExtractionFailure]
def getMimeTypesCoverage: Either[Failure, List[MimeTypeCoverage]]
def getFilterableMimeTypes: Either[Failure, List[MimeType]]
def getAllMimeTypes: Attempt[List[MimeType]]
def rerunSuccessfulExtractorsForBlob(uri: Uri): Attempt[Unit]
def rerunFailedExtractorsForBlob(uri: Uri): Attempt[Unit]
def getBlob(uri: Uri): Either[Failure, Blob]
def getBlobsForFiles(fileUris: List[String]): Either[Failure, Map[String, Blob]]
def getEmailThread(uri: String): Attempt[List[EmailNeighbours]]
def getLanguagesProcessedByOcrMyPdf(uri: Uri): Attempt[List[Language]]
def deleteBlob(uri: Uri): Attempt[Unit]
def deleteResourceAndDescendants(uri: Uri): Attempt[Unit]
def getWorkspaceChildrenWithUri(workspaceNodeId: Option[WorkspaceItemUploadContext], childUri: String): Attempt[List[IngestFileResult]]
}