description = 'OpenCensus Examples'

buildscript {
    repositories {
        mavenCentral()
        mavenLocal()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.8'
        classpath 'com.github.ben-manes:gradle-versions-plugin:0.20.0'
        classpath "gradle.plugin.com.github.sherter.google-java-format:google-java-format-gradle-plugin:0.8"
    }
}

apply plugin: "checkstyle"
apply plugin: 'com.google.protobuf'
apply plugin: 'com.github.sherter.google-java-format'
apply plugin: 'idea'
apply plugin: 'java'

// Display the version report using: ./gradlew dependencyUpdates
// Also see https://github.com/ben-manes/gradle-versions-plugin.
apply plugin: 'com.github.ben-manes.versions'

repositories {
    mavenCentral()
    mavenLocal()
}

group = "io.opencensus"
version = "0.32.0-SNAPSHOT" // CURRENT_OPENCENSUS_VERSION

def opencensusVersion = "0.30.0" // LATEST_OPENCENSUS_RELEASE_VERSION
def grpcVersion = "1.32.2" // CURRENT_GRPC_VERSION
def prometheusVersion = "0.6.0"
def jettyVersion = "9.4.17.v20190418"
def tcnativeVersion = "2.0.20.Final"

tasks.withType(JavaCompile) {
    sourceCompatibility = '1.8'
    targetCompatibility = '1.8'
}

dependencies {
    compile "com.google.api.grpc:proto-google-common-protos:1.12.0",
            "io.opencensus:opencensus-api:${opencensusVersion}",
            "io.opencensus:opencensus-contrib-zpages:${opencensusVersion}",
            "io.opencensus:opencensus-contrib-grpc-metrics:${opencensusVersion}",
            "io.opencensus:opencensus-contrib-http-util:${opencensusVersion}",
            "io.opencensus:opencensus-contrib-http-servlet:${opencensusVersion}",
            "io.opencensus:opencensus-contrib-http-jetty-client:${opencensusVersion}",
            "io.opencensus:opencensus-exporter-metrics-ocagent:${opencensusVersion}",
            "io.opencensus:opencensus-exporter-stats-prometheus:${opencensusVersion}",
            "io.opencensus:opencensus-exporter-stats-stackdriver:${opencensusVersion}",
            "io.opencensus:opencensus-exporter-trace-jaeger:${opencensusVersion}",
            "io.opencensus:opencensus-exporter-trace-stackdriver:${opencensusVersion}",
            "io.opencensus:opencensus-exporter-trace-logging:${opencensusVersion}",
            "io.opencensus:opencensus-exporter-trace-ocagent:${opencensusVersion}",
            "io.grpc:grpc-protobuf:${grpcVersion}",
            "io.grpc:grpc-stub:${grpcVersion}",
            "io.grpc:grpc-netty-shaded:${grpcVersion}",
            "io.grpc:grpc-census:${grpcVersion}",
            "io.prometheus:simpleclient_httpserver:${prometheusVersion}",
            "javax.servlet:javax.servlet-api:3.1.0",
            "org.eclipse.jetty:jetty-server:${jettyVersion}",
            "org.eclipse.jetty:jetty-client:${jettyVersion}",
            "org.eclipse.jetty:jetty-servlet:${jettyVersion}",
            "org.slf4j:slf4j-log4j12:1.7.25"

    runtime "io.opencensus:opencensus-impl:${opencensusVersion}",
            "io.netty:netty-tcnative-boringssl-static:${tcnativeVersion}"
}

googleJavaFormat {
    toolVersion '1.7'
    source = 'src/main'
    include '**/*.java'
}

verifyGoogleJavaFormat {
    source = 'src/main'
    include '**/*.java'
}

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.6.1'
    }
    plugins {
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
        }
    }
    generateProtoTasks {
        all()*.plugins {
            grpc {}
        }
        ofSourceSet('main')
    }
}

// Inform IDEs like IntelliJ IDEA, Eclipse or NetBeans about the generated code.
sourceSets {
    main {
        java {
            srcDir 'src'
            srcDirs 'build/generated/source/proto/main/grpc'
            srcDirs 'build/generated/source/proto/main/java'
        }
    }
}

checkstyle {
    configFile = file("$rootDir/../buildscripts/checkstyle.xml")
    toolVersion = "8.12"
    ignoreFailures = false
    configProperties["rootDir"] = "$rootDir/.."
}

// Disable checkstyle if no java8.
checkstyleMain.source = 'src/main'
checkstyleTest.source = 'src/main'

// Provide convenience executables for trying out the examples.
apply plugin: 'application'

startScripts.enabled = false

task tagContextExample(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.tags.TagContextExample'
    applicationName = 'TagContextExample'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task multiSpansTracing(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.trace.MultiSpansTracing'
    applicationName = 'MultiSpansTracing'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task multiSpansScopedTracing(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.trace.MultiSpansScopedTracing'
    applicationName = 'MultiSpansScopedTracing'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task multiSpansContextTracing(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.trace.MultiSpansContextTracing'
    applicationName = 'MultiSpansContextTracing'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task zPagesTester(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.zpages.ZPagesTester'
    applicationName = 'ZPagesTester'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task quickStart(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.helloworld.QuickStart'
    applicationName = 'QuickStart'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task helloWorldServer(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.grpc.helloworld.HelloWorldServer'
    applicationName = 'HelloWorldServer'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task helloWorldClient(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.grpc.helloworld.HelloWorldClient'
    applicationName = 'HelloWorldClient'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task repl(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.quickstart.Repl'
    applicationName = 'Repl'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task stackdriverStatsQuickstart(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.stats.StackdriverQuickstart'
    applicationName = 'StackdriverQuickstart'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task derivedDoubleGaugeQuickstart(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.gauges.DerivedDoubleGaugeQuickstart'
    applicationName = 'DerivedDoubleGaugeQuickstart'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task derivedLongGaugeQuickstart(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.gauges.DerivedLongGaugeQuickstart'
    applicationName = 'DerivedLongGaugeQuickstart'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task doubleGaugeQuickstart(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.gauges.DoubleGaugeQuickstart'
    applicationName = 'DoubleGaugeQuickstart'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task longGaugeQuickstart(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.gauges.LongGaugeQuickstart'
    applicationName = 'LongGaugeQuickstart'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task httpJettyServer(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.http.jetty.server.HelloWorldServer'
    applicationName = 'HttpJettyServer'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task httpJettyClient(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.http.jetty.client.HelloWorldClient'
    applicationName = 'HttpJettyClient'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}

task ocAgentExportersQuickStart(type: CreateStartScripts) {
    mainClassName = 'io.opencensus.examples.ocagent.OcAgentExportersQuickStart'
    applicationName = 'OcAgentExportersQuickStart'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + project.configurations.runtime
}


applicationDistribution.into('bin') {
    from(multiSpansTracing)
    from(multiSpansScopedTracing)
    from(multiSpansContextTracing)
    from(tagContextExample)
    from(zPagesTester)
    from(quickStart)
    from(helloWorldServer)
    from(helloWorldClient)
    from(repl)
    from(stackdriverStatsQuickstart)
    from(derivedDoubleGaugeQuickstart)
    from(derivedLongGaugeQuickstart)
    from(doubleGaugeQuickstart)
    from(longGaugeQuickstart)
    from(httpJettyServer)
    from(httpJettyClient)
    from(ocAgentExportersQuickStart)
    fileMode = 0755
}
