All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mb.pie.runtime.logger.exec.Logger.kt Maven / Gradle / Ivy

The newest version!
package mb.pie.runtime.logger.exec

import mb.pie.api.*
import mb.pie.api.exec.ExecReason
import java.util.concurrent.atomic.AtomicInteger

class LoggerExecutorLogger @JvmOverloads constructor(
  private val logger: Logger,
  private val descLimit: Int = 200
) : ExecutorLogger {
  private var indentation = AtomicInteger(0)
  private val indent get() = " ".repeat(indentation.get())

  override fun requireTopDownInitialStart(key: TaskKey, task: Task<*, *>) {}
  override fun requireTopDownInitialEnd(key: TaskKey, task: Task<*, *>, output: Out) {}

  override fun requireTopDownStart(key: TaskKey, task: Task<*, *>) {
    logger.trace("${indent}v ${task.desc(descLimit)}")
    indentation.incrementAndGet()
  }

  override fun requireTopDownEnd(key: TaskKey, task: Task<*, *>, output: Out) {
    indentation.decrementAndGet()
    logger.trace("$indent✔ ${task.desc(descLimit)} -> ${output.toString().toShortString(descLimit)}")
  }


  override fun requireBottomUpInitialStart(changedResources: Set) {}
  override fun requireBottomUpInitialEnd() {}


  override fun checkVisitedStart(key: TaskKey) {}
  override fun checkVisitedEnd(key: TaskKey, output: Out) {}

  override fun checkStoredStart(key: TaskKey) {}
  override fun checkStoredEnd(key: TaskKey, output: Out) {}

  override fun checkResourceProvideStart(key: TaskKey, task: Task<*, *>, dep: ResourceProvideDep) {}
  override fun checkResourceProvideEnd(key: TaskKey, task: Task<*, *>, dep: ResourceProvideDep, reason: ExecReason?) {
    if(reason != null) {
      if(reason is InconsistentResourceProvide) {
        logger.trace("$indent␦ ${dep.key} (inconsistent: ${dep.stamp} vs ${reason.newStamp})")
      } else {
        logger.trace("$indent␦ ${dep.key} (inconsistent)")
      }
    } else {
      logger.trace("$indent␦ ${dep.key} (consistent: ${dep.stamp})")
    }
  }

  override fun checkResourceRequireStart(key: TaskKey, task: Task<*, *>, dep: ResourceRequireDep) {}
  override fun checkResourceRequireEnd(key: TaskKey, task: Task<*, *>, dep: ResourceRequireDep, reason: ExecReason?) {
    if(reason != null) {
      if(reason is InconsistentResourceProvide) {
        logger.trace("$indent␦ ${dep.key} (inconsistent: ${dep.stamp} vs ${reason.newStamp})")
      } else {
        logger.trace("$indent␦ ${dep.key} (inconsistent)")
      }
    } else {
      logger.trace("$indent␦ ${dep.key} (consistent: ${dep.stamp})")
    }
  }

  override fun checkTaskRequireStart(key: TaskKey, task: Task<*, *>, dep: TaskRequireDep) {}
  override fun checkTaskRequireEnd(key: TaskKey, task: Task<*, *>, dep: TaskRequireDep, reason: ExecReason?) {
    when(reason) {
      is InconsistentTaskReq ->
        logger.trace("$indent␦ ${dep.callee.toShortString(descLimit)} (inconsistent: ${dep.stamp} vs ${reason.newStamp})")
      null ->
        logger.trace("$indent␦ ${dep.callee.toShortString(descLimit)} (consistent: ${dep.stamp})")
    }
  }


  override fun executeStart(key: TaskKey, task: Task<*, *>, reason: ExecReason) {
    logger.info("$indent> ${task.desc(descLimit)} (reason: $reason)")
  }

  override fun executeEnd(key: TaskKey, task: Task<*, *>, reason: ExecReason, data: TaskData<*, *>) {
    logger.info("$indent< ${data.output.toString().toShortString(descLimit)}")
  }


  override fun invokeObserverStart(observer: Function, key: TaskKey, output: Out) {
    logger.trace("$indent@ ${observer.toString().toShortString(descLimit)}(${output.toString().toShortString(descLimit)})")
  }

  override fun invokeObserverEnd(observer: Function, key: TaskKey, output: Out) {}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy