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

io.takari.maven.builder.smart.ProjectsBuildMetrics Maven / Gradle / Ivy

There is a newer version: 1.0.2
Show newest version
package io.takari.maven.builder.smart;

import io.takari.maven.builder.smart.BuildMetrics.Timer;

import java.util.*;

import org.apache.maven.project.MavenProject;

import com.google.common.base.Functions;
import com.google.common.collect.Ordering;

class ProjectsBuildMetrics implements SmartBuilderImpl.Listener {
  private final Map projectsBuildMetrics;

  ProjectsBuildMetrics(Collection projects) {
    Map projectsBuildMetrics = new HashMap<>();
    for (MavenProject project : projects) {
      projectsBuildMetrics.put(project, new BuildMetrics());
    }
    this.projectsBuildMetrics = Collections.unmodifiableMap(projectsBuildMetrics);
  }

  public BuildMetrics getBuildMetrics(final MavenProject project) {
    return projectsBuildMetrics.get(project);
  }

  private void start(final MavenProject project, final Timer timer) {
    projectsBuildMetrics.get(project).start(timer);
  }

  private void stop(final MavenProject project, final Timer timer) {
    projectsBuildMetrics.get(project).stop(timer);
  }

  public List getProjects() {
    return new ArrayList<>(projectsBuildMetrics.keySet());
  }

  public List getProjectsSortedByWalltime() {
    return Ordering.natural().onResultOf(Functions.forMap(projectsBuildMetrics))
        .sortedCopy(projectsBuildMetrics.keySet());
  }

  @Override
  public void onReady(MavenProject project) {
    start(project, Timer.QUEUETIME_MS);
  }

  @Override
  public void onStart(MavenProject project) {
    stop(project, Timer.QUEUETIME_MS);
    start(project, Timer.SERVICETIME_MS);
    // TODO add CPU usage tracking
  }

  @Override
  public void onFinish(MavenProject project) {
    stop(project, Timer.SERVICETIME_MS);
  }

  public Map asMap(Timer timer) {
    Map result = new HashMap<>();
    for (Map.Entry entry : projectsBuildMetrics.entrySet()) {
      result.put(entry.getKey(), entry.getValue().getMetricMillis(timer));
    }
    return result;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy