/******************************************************************************
 * Programme : SAS/CONNECT trifft CAS: So orchestrieren Sie hybride Sessions wie ein Profi
 * Reference : SASCONB397
 * Source    : https://www.wearecas.eu/en/sampleCode/SASCONB397
 ******************************************************************************/

/* --- BLOC 1 --- */
OPTIONS NETENCRYPTALGORITHM=SSL;

%put ********** CLIENT ********;
%put My local user ID is:  &sysuserid;
%put The local host name is: &syshostname;
%put The local process name is: &sysprocessname;
%put The local process ID is: &sysprocessid;
%put The local process mode is: &sysprocessmode;

%let SASCLOUDNATIVE_state="%sysget(SASCLOUDNATIVE)";
%put &SASCLOUDNATIVE_state;

%let TCPNOIPADDR_state="%sysget(TCPNOIPADDR)";
%put &ENVIRONMENT="%sysget(SAS_SERVICES_URL)";
%put &ENVIRONMENT;

/* --- BLOC 2 --- */
/* CAS session */
%let _sessionName=&sysuserid;
%let _sessionType=batch;
%let _namespace=viya;
%let _casserver=default;

/*    Start a CAS session on the cas-shared-&_casserver CAS server */
cas &_sessionName._&_sessionType host="controller.sas-cas-server-&_casserver..&_namespace..svc.cluster.local" port=5570 sessopts=(metrics=true);


/* Connect session   */
/*   INTERNAL ClusterIP   */
 %let host=sas-connect-spawner 17551;
/*   EXTERNAL NodePort   */
* %let host=sasserver 30377;

SIGNON host user='sas' pass='sas';
%syslput _sessionTypeRemote=&_sessionType;

/* --- BLOC 3 --- */
rsubmit;
   %put ********** SERVER ********;
   %put My remote user ID is:  &sysuserid;
   %put The remote host name is: &syshostname;
   %put The remote process name is: &sysprocessname;
   %put The remote process ID is: &sysprocessid;
   %put The remote process mode is: &sysprocessmode;

   %let SASCLOUDNATIVE_state="%sysget(SASCLOUDNATIVE)";
   %put &SASCLOUDNATIVE_state;
   
   %let TCPNOIPADDR_state="%sysget(TCPNOIPADDR)";
   %put &TCPNOIPADDR_state;
   
   %let ENVIRONMENT="%sysget(SAS_SERVICES_URL)";
   %put &ENVIRONMENT;
endrsubmit;

/* --- BLOC 4 --- */
data local&_sessionType;
   do i=1 to 100000000;
      j=ranuni(1234);
      output;
   end;
run;

/* --- BLOC 5 --- */
rsubmit;
   %put &_sessionTypeRemote;

   data remote&_sessionTypeRemote;
      do i=1 to 100000000;
         j=ranuni(1234);
         output;
      end;
   run;

   %sysrput rsaswork=%sysfunc(pathname(work));
endrsubmit;

/* --- BLOC 6 --- */
%put "&rsaswork";

libname rsaswork "&rsaswork" server=host;

/* --- BLOC 7 --- */
rsubmit;
   data _null_;
      call sleep(5,60);
   run;
endrsubmit;

/* --- BLOC 8 --- */
* waitfor _all_;


/* Close both CAS and connect sessions */
cas &_sessionName._&_sessionType terminate;
signoff _all_;

