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

com.teradata.benchto.service.repo.BenchmarkRunRepo Maven / Gradle / Ivy

There is a newer version: 0.4
Show newest version
/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.teradata.benchto.service.repo;

import com.teradata.benchto.service.model.BenchmarkRun;
import com.teradata.benchto.service.model.Environment;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import javax.persistence.LockModeType;

import java.sql.Timestamp;
import java.time.ZonedDateTime;
import java.util.List;

@Repository
public interface BenchmarkRunRepo
        extends JpaRepository
{
    BenchmarkRun findByUniqueNameAndSequenceId(String uniqueName, String sequenceId);

    @Lock(LockModeType.PESSIMISTIC_WRITE)
    BenchmarkRun findForUpdateByUniqueNameAndSequenceId(String uniqueName, String sequenceId);

    List findByUniqueNameAndEnvironmentOrderBySequenceIdDesc(String uniqueName, Environment environment);

    @Query(value = "" +
            "WITH summary AS ( " +
            "  SELECT " +
            "    b.id, " +
            "    b.name, " +
            "    b.unique_name, " +
            "    b.sequence_id, " +
            "    b.status, " +
            "    b.version, " +
            "    b.started, " +
            "    b.ended, " +
            "    b.environment_id, " +
            "    b.executions_mean_duration, " +
            "    b.executions_stddev_duration, " +
            "    rank() " +
            "    OVER (PARTITION BY b.unique_name, b.environment_id " +
            "      ORDER BY b.sequence_id DESC) AS rk " +
            "  FROM benchmark_runs b " +
            "  WHERE b.environment_id = :environment_id " +
            ") " +
            "SELECT s.* " +
            "FROM summary s " +
            "WHERE s.rk = 1 " +
            "ORDER BY s.started DESC ",
            nativeQuery = true)
    List findLatest(@Param("environment_id") long environmentId);

    @Query("SELECT br FROM BenchmarkRun br WHERE " +
            "br.status = 'STARTED' AND " +
            "br.started <= :startDate")
    List findStartedBefore(@Param("startDate") ZonedDateTime startDate);

    @Query(value = "" +
            "SELECT MAX(ended) " +
            "FROM benchmark_runs " +
            "WHERE unique_name = :uniqueName and status = 'ENDED'",
            nativeQuery = true)
    Timestamp findTimeOfLatestSuccessfulExecution(@Param("uniqueName") String uniqueName);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy