(!******************************************************* * Mosel Example Problems * * ====================== * * * * file aec2test.mos * * ````````````````` * * A simple model for testing the AEC2 package * * * * (c) 2011-2025 Fair Isaac Corporation * * author: Y. Colombani * *******************************************************!) model aec2_test uses 'aec2','mmjobs' parameters CFG="aec2.acf" end-parameters declarations ecf:EC2Conf ainst:EC2instance instances:list of EC2instance l:text procedure testconnect(constr:string) end-declarations ! If necessary, define an HTTP proxy !setparam("httpgproxy","calliope") ! Now load the configuration prepared with aec2setup if not loadAEC2Config(ecf,CFG) then writeln("The configuration file '",CFG,"' is missing or incomplete.") writeln("Please run the 'aec2setup' program for updating it.") exit(1) end-if writeln("++++ Testing connection to an AEC2 image ++++") writeln writeln("Configuration from '",CFG,"':") writeln(" endpoint: ",ecf.endpoint) writeln(" AWS ID file: ",ecf.aidfile) writeln(" ssh key file: ",ecf.askfile) writeln(" AMI Id: ",ecf.image) writeln(" Instance type: ",ecf.type) writeln(" Security group: ",ecf.secgrp) writeln(" xssh port: ",ecf.xsrvport) writeln(" xssh context: ",ecf.xsrvctx) writeln(" xssh password: ",ecf.xsrvpass) writeln(" Default connection mode: ",ecf.connmode) writeln ! Let's try to find a running instance instances:=getAllInstances(ecf) forall(i in instances|i.state=AEC2_RUNNING and i.image=ecf.image) insrunning+=[i] if insrunning.size>0 then writeln("+ Found the following instance(s):") forall(i in insrunning) do writeln("\t",i.Id,"(",EC2statetext(i.state),") from image ",i.image) ! we keep the first instance built from an appropriate image if ainst.Id="" then ainst:=i end-if end-do if ainst.Id="" then writeln("None of these instances can be used") end-if else writeln("+ No compatible instance running.") end-if writeln if ainst.Id="" then write("\nWould you like to start a new Amazon instance ?");fflush if readtextline(l)<=0 or (getchar(l,1)<>getchar('y') and getchar(l,1)<>getchar('Y')) then writeln("Aborting.") exit(1) end-if write("+ Starting a new EC2 instance.");fflush ainst:=runInstance(ecf) if not waitInstanceReady(ecf,ainst,300,true) then writeln("\nFailed to start instance!") terminateInstance(ecf,ainst) exit(1) end-if writeln end-if writeln("+ Instance properties:") writeln(" Id: ",ainst.Id) writeln(" Image: ",ainst.image) writeln(" State: ",ainst.state," (",EC2statetext(ainst.state),")") writeln(" Dns: ",ainst.dns) writeln(" ssh key name: ",ainst.key) writeln(" Type: ",ainst.type) writeln(" Launchtime: ",ainst.launchtime) writeln(" IP: ",ainst.ipaddr) writeln if ecf.askfile<>'' then testconnect(getConnStringSSH(ecf,ainst)) else writeln("+ No ssh key provided - cannot connect with this method.") end-if if ecf.xsrvport>0 then testconnect(getConnStringXSRV(ecf,ainst)) else writeln("+ xprmsrv disabled - cannot connect with this method.") end-if write("\nWould you like to shut down Amazon instance ",ainst.Id," ?");fflush if readtextline(l)>0 and (getchar(l,1)=89 or getchar(l,1)=121) then writeln("Terminating Amazon instance.") terminateInstance(ecf,ainst) end-if ! Use Mosel on an EC2 instance procedure testconnect(constr:string) declarations minst:Mosel rmod:Model end-declarations writeln("---------------------------------") writeln("+ Starting Mosel using '",constr,"'") ! Start a Mosel instance in the cloud... if connect(minst,constr)<>0 then writeln("Failed to start Mosel on ",ainst.Id) else writeln("+ Remote instance system information:",getsysinfo(minst)) writeln ! generate a simple model for testing fopen("tmp:minimod.mos",F_OUTPUT) writeln( "model minimod\n"+ "writeln('Hello from EC2')\n"+ "end-model") fclose(F_OUTPUT) writeln("+ Compile a model remotely (bim file saved on the remote instance)") ! Now compile then load... if compile(minst,"","rmt:tmp:minimod.mos","tmp:m.bim")<>0 then writeln("Compilation failed!") end-if writeln("+ Load then run:") load(minst,rmod,"tmp:m.bim") run(rmod) wait dropnextevent writeln("\n+ Execution finished!") unload(rmod) writeln("+ Disconnecting Mosel.") disconnect(minst) end-if writeln("---------------------------------") end-procedure end-model