/******************************************************************************
 * Programme : Configuración y conexión a una sesión SAS remota
 * Reference : CONFIGC7BE
 * Source    : https://www.wearecas.eu/en/sampleCode/CONFIGC7BE
 ******************************************************************************/

/* --- 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 &TCPNOIPADDR_state;

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

/* --- BLOC 2 --- */
/* CAS session */
%let _sessionName=&sysuserid;
%let _sessionType=sas9;
%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);

/* --- BLOC 3 --- */
/* Connect session   */
/*   INTERNAL ClusterIP   */
* %let host=sas-connect-spawner 17551;
/*   EXTERNAL NodePort   */
%let host=sasserver30377;

SIGNON host user='sas' pass='sas';
%syslput _sessionTypeRemote=&_sessionType;

/* --- BLOC 4 --- */
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 5 --- */
data local&_sessionType;
   do i=1 to 100000000;
      j=ranuni(1234);
      output;
   end;
run;

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

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

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

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

libname rsaswork "&rsaswork" server=host;

/* --- BLOC 8 --- */
/* When running as a batch job - need to keep the session open fro fe minutes */
/*
rsubmit;
   data _null_;
      call sleep(5,60);
   run;
endrsubmit;
*/

* waitfor _all_;


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

