Initializing help system before first use

Using the AEC2 package with mmjobs


Type: Programming
Rating: 3 (intermediate)
Description: A simple Mosel program for testing the AEC2 package.
File(s): aec2test.mos

aec2test.mos
(!*******************************************************
  * 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

© 2001-2025 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation (“FICO”). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.