DEV Community

Query Filter
Query Filter

Posted on

path19

apply plugin: 'java'

//LEONIND

//def asset=
//def region=
//def env=
//def instanceName=
//def topic_instance=
//def tempDir=
//Boolean isDevLocal = false;

def javaHome = System.getenv('JAVA_HOME')

if(!javaHome){
    throw new GradleException("JAVA_HOME environment variable not set.")
}

def toolsJarFile = new File(javaHome + File.separator + "lib" + File.separator + "tools.jar")

if(!toolsJarFile.exists()){
    throw new GradleException("JAVA_HOME is not pointing to JDK, couldn't find tools.jar ${toolsJarFile.absolutePath}.")
}

def cpls_instances_apac = [
    global_refdata : [
        asset : 'cash',
        region : 'APAC',
        country : 'HNK',
        env : 'dev',
        instance : 'global_refdata_cpls',
        appName : 'GLOBAL.HNK.GLOBAL.REFDATA.CPLS',
        temp : 'global_refdata_cpls',
        debugPort : 8890
    ],
    cash_cpls_mys_sales : [
        asset    : 'cash',
        region    : 'APAC',
        country    : 'MYS',
        env    : 'dev',
        instance  : 'cash_cpls_mys_sales',
        appName    : 'GLOBAL.MYS.COMET.CPLS.CASH_CPLS.SALES',
        temp    : 'cash_cpls_mys_sales',
        debugPort: 8890
    ],
    cash_cpls_jpn_trdr1 : [
        asset    : 'cash',
        region    : 'APAC',
        country    : 'JPN',
        env    : 'dev',
        instance  : 'cash_cpls_jpn_trdr1',
        appName    : 'GLOBAL.JPN.COMET.CPLS.CASH_CPLS.TRDR',
        temp    : 'cash_cpls_jpn_trdr1',
        debugPort: 8890
    ],
    deriv_cpls_jpn_prop1 : [
        asset    : 'derivatives',
        region    : 'APAC',
        country    : 'JPN',
        env    : 'dev',
        instance  : 'deriv_cpls_jpn_prop1',
        appName    : 'GLOBAL.JPN.COMET.CPLS.DERIV_PROP_CPLS1',
        temp    : 'deriv_cpls_jpn_prop1',
        debugPort: 8890
    ],
    cash_cpls_sls1    : [
        app    : 'CPLS',
        asset    : 'cash',
        region    : 'US',
        env    : 'dev',
        instance  : 'cash_cpls_sls1',
        appName    : 'GLOBAL.NA.US.COMET.CPLS.CPLS_CASH.CASH_CPLS_INSTANCE1',
        temp    : 'cash_cpls_sls1',
        debugPort: 9797
    ],
    emea_local_dev_cpls : [
        app : 'CPLS',
        asset : 'multi',
        region : 'EMEA',
        env : 'dev',
        instance : 'emea_cpls_sls102',
        appName : 'GLOBAL.COMET.EMEA.CASHSLS.CPLS',
        temp : 'emea_cpls_sls102',
        topic_instance : 'local_dev_100',
        instance_id : 201110100,
        isDevLocal : true,
        debugPort : 8741
    ],
    cash_position_1_qa : [
        app : 'CPLS',
        asset : 'cash',
        region : 'US',
        env : 'qa',
        instance : 'cash_position_1',
        appName : 'GLOBAL.US.COMET.POSITION.POSITIONINSTANCE1',
        temp : 'cash_position_1',
        isDevLocal : false,
        debugPort : 9798
    ],
    cash_position_1_dev : [
        app : 'CPLS',
        asset : 'cash',
        region : 'US',
        env : 'dev',
        instance : 'cash_position_1',
        appName : 'GLOBAL.US.COMET.POSITION.POSITIONINSTANCE1',
        temp : 'cash_position_1',
        isDevLocal : true,
        debugPort : 9799
    ]
]

task prepareLibDir(type: Copy) {
    from configurations.sharedlib
    into 'lib'
    rename('libZeusCcDt.*.so', 'libZeusCcDt.so')
    rename('libCcDt.*.so', 'libCcDt.so')
}

tasks.withType(JavaExec) {
    systemProperty "java.library.path", file("lib").absolutePath
    environment "LD_LIBRARY_PATH", file("lib").absolutePath
}

task runQCacheGen(dependsOn: [prepareLibDir], type: JavaExec) {
    mainClass = "com.citigroup.get.quantum.store2.generator.gui.CacheManagerGui"
    classpath = sourceSets.main.runtimeClasspath
    workingDir = "/src/main"
    println "###### CLASSPATH SS ######"
    sourceSets.main.runtimeClasspath.each { File it ->
        println "rc-> " + it
    }

    jvmArgs "-Xms512M",
        "-Xmx512M",
        "-DConfig.Dir=" + file("src/main/config/resources/cachedefinitions"),
        "-DDEFAULT_DB=Sybase"
    standardInput = System.in
}

// Helper methods defined outside the task configuration
def setTmpDir = {
    if (System.properties.'os.name'.toLowerCase().contains("linux")){
        System.properties.'java.io.tmpdir' = '/opt/lgohome'
        logger.info "Setting [java.io.tmpdir] to [${System.properties.'java.io.tmpdir'}]"
    }
    if (System.properties.'os.name'.toLowerCase().contains("windows")){
        System.properties.'java.io.tmpdir' = 'C:/temp'
        logger.info "Setting [java.io.tmpdir] to [${System.properties.'java.io.tmpdir'}]"
    }
}

def buildFileSystem = { param ->
    ['dds','log','store'].each { String i ->
        def file = new File("${System.properties.'java.io.tmpdir'}/$param/$i")
        file.mkdirs()
    }
}

cpls_instances_apac.each { String task_name, Map instance_options ->

    if(!tasks.findByName(task_name)){
        task(task_name, type: JavaExec) {
            // Store instance_options for this specific task
            final def taskOptions = instance_options

            // Add dependencies
            dependsOn prepareLibDir, classes

            systemProperty "org.gradle.scan.acceptTerm", "true"

            // Set main class at configuration time (not in doFirst)
            mainClass = 'com.citi.DebugLauncher'

            // Set working directory at configuration time
            workingDir file('src/main/config')

            // Set standard input
            standardInput = System.in

            // Configure the task
            doFirst {
                logger.info "task: " + task_name + " started execution"

                // Extract values from taskOptions inside doFirst
                def asset = taskOptions.asset
                def region = taskOptions.region
                def country = taskOptions.country ?: ''
                def env = taskOptions.env
                def instanceName = taskOptions.instance
                def topic_instance = taskOptions.topic_instance ?: '102'
                def instance_id = taskOptions.instance_id ?: ''
                def appName = taskOptions.appName
                def tempDir = taskOptions.temp
                def debugPort = taskOptions.debugPort
                def app = taskOptions.app ?: 'CPLS_ASIA'
                def isDevLocal = taskOptions.isDevLocal?.toString()?.toBoolean() ?: false

                // Set temp directory
                setTmpDir()
                buildFileSystem(tempDir)

                // Define file paths
                def cfgFileName = 'CFG.' + appName + '.xml'
                def devConfigServiceFile = "devConfigService.xml"

                def cplsConfigFile = file("src/main/config/quantum/$asset/$region/$country/$env/cplsConfig.xml")
                def cplsFile = file("src/main/config/dds/$asset/$region/$country/$env/$instanceName/$cfgFileName")
                def cplsDir = file("src/main/config/quantum/$asset/$region/$country/$env/$instanceName")
                def loggingConfig = file("src/main/config/quantum/$asset/$region/$country/$env/logging.properties.txt")

                def cpacs = files(
                    "src/main/config/quantum/$asset/$region/$country/$env/cpacs/cpacs.xml", 
                    "src/main/config/quantum/$asset/$region/$country/$env/cpacs.xml"
                )
                def cpacsFile = cpacs.find { File file -> file.exists() }

                def aleConfig = file("src/main/config/quantum/$asset/$region/$country/$env/alefcg")
                def securityFile = file("src/main/config/resources/security.dat")

                def instanceClasspath = files(
                    file("src/main/config/quantum/$asset/$region/$country/$env"),
                    file("src/main/config/quantum/$asset/$region/$country/"),
                    file("src/main/config/quantum/$asset/$region/$country/$env/$instanceName"),
                    file("src/main/config/dds/$asset/$region/$country/$env/$instanceName"),
                    file('src/main/config'),
                    toolsJarFile
                )

                // Setup dev config if needed
                if (isDevLocal) {
                    copy {
                        from "src/main/config/quantum/$asset/$region/$env/$instanceName/configService.xml"
                        into "${System.properties.'java.io.tmpdir'}/$tempDir/dds/"

                        filter { String line ->
                            line.replaceAll('<file-cache location="[/-a-zA-Z0-9_]*\\/>', 
                                "<file-cache location=\"${System.properties.'java.io.tmpdir'}/$tempDir/dds/\"/>")
                        }

                        rename('configService.xml', 'devConfigService.xml')
                    }
                }

                // Prepare JVM arguments
                def jvmArgsList = [
                    "-Xms26",
                    "-Xmx46",
                    "-Xss256k",
                    "-Djava.library.path=" + file('lib').absolutePath,
                    "-DenableRestrictiveQtyCheck=false",
                    "-Dcom.citigroup.project.config.filename=$cplsConfigFile",
                    "-Dapplication=$app",
                    "-Dinstance=$instanceName",
                    "-Ddds.tmpdir=${System.properties.'java.io.tmpdir'}/$tempDir/dds/",
                    "-Dcpls.path.store.dir=${System.properties.'java.io.tmpdir'}/$tempDir/store/",
                    "-Djava.io.tmpdir=${System.properties.'java.io.tmpdir'}/$tempDir/log/",
                    "-Dcom.citi.get.etsf.config.DDsConfigurationImpl.local.file=$cplsFile",
                    "-Dcom.citigroup.get.refdata.dbconn.max.number=60",
                    "-Dcom.citigroup.get.prodapi.dbconn.max.number=60",
                    "-Dcom.citigroup.get.citijdbc.dbconn.max.number=60",
                    "-Dpackage.version=9.1.89n_b7",
                    "-Dcpls.path.asset.region=$asset/$region${country ? '/' + country : ''}/$env",
                    "-Dcpls.path.springqas.dir=$cplsDir",
                    "-Dregion=$region${country ? '/' + country : ''}",
                    "-Djava.util.logging.config.file=$loggingConfig",
                    "-Dcom.citigroup.cpacs.util.preferences.systemFileName=$cpacsFile",
                    "-Dquantum.config.springconfigurationBase=" + file("src/main/config/quantum/$asset/$region/$country/$env/$instanceName"),
                    "-DALE_CONFIGFILE=$aleConfig",
                    "-DALE_SECURITYFILE=$securityFile",
                    "-DMD_CONFIG_FILE_LOCATION=",
                    "-Dcom.citi.get.etsf.appName=$appName"
                ]

                if (taskOptions.isDevLocal?.toString()?.toBoolean()) {
                    jvmArgsList += "-Ddev_local=true"
                }

                jvmArgs jvmArgsList

                // Setup classpath
                def quantumJarFile = sourceSets.main.runtimeClasspath.filter {
                    it.name.endsWith('.jar') && it.name.contains("quantum")
                }

                classpath = instanceClasspath + quantumJarFile + 
                    (sourceSets.main.runtimeClasspath + files("${System.properties.'java.io.tmpdir'}/$tempDir/dds") - quantumJarFile)

                // Create classpath file
                def cpFile = new File(buildDir, "real-classpath-${task_name}.txt")
                cpFile.text = classpath.asPath
                systemProperty "quantum.classpath.file", cpFile.absolutePath

                classpath.each { File file -> println "classpath [${task_name}]: " + file }

                // Set args
                args "file://" + file("src/main/config/quantum/$asset/$region/$country/$env").absolutePath,
                    instanceName,
                    'dummy'

                logger.info "task: " + task_name + " completes execution"
            }
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)