64%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)
65 , errds=work.mp_abort_errds
69%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;
72%
if not(%eval(%unquote(&iftrue))) %then %
return;
75%
if %length(&mac)>0 %then %put NOTE- called by &mac;
78%
if %symexist(_SYSINCLUDEFILEDEVICE)
80and %superq(SYSPROCESSNAME) ne %str(Compute Server)
82 %
if "*&_SYSINCLUDEFILEDEVICE*" ne
"**" %then %
do;
85 length mac $100 msg $5000;
97%
if %symexist(_PROGRAM)
98 or %superq(SYSPROCESSNAME) = %str(Compute Server)
101 options obs=max replace mprint;
102 %
if "%substr(&sysver,1,1)" ne
"4" and
"%substr(&sysver,1,1)" ne
"5"
104 options nosyntaxcheck;
107 %
if &mode=INCLUDE %then %
do;
108 %
if %sysfunc(exist(&errds))=1 %then %
do;
111 call symputx(
'iftrue',iftrue,
'l');
112 call symputx(
'mac',mac,
'l');
113 call symputx(
'msg',msg,
'l');
116 %
if (&iftrue)=0 %then %
return;
119 %put &sysmacroname: No include errors found;
125 %local logloc logline;
127 %
if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;
128 %
else %let logloc=%qsysfunc(getoption(LOG));
129 proc printto log=log;run;
131 %
if %length(&logloc)>0 %then %
do;
133 infile &logloc lrecl=5000;
134 input; putlog _infile_;
138 _infile_=:
"%str(WARN)ING" or _infile_=:
"%str(ERR)OR"
141 call symputx(
'logline',_n_);
146 %
if &logline>0 %then %
do;
148 infile &logloc lrecl=5000;
152 if _n_ ge &logline-15 and stoploop=0 then
do until (i>22);
153 call symputx(
'logmsg',catx(
'\n',symget(
'logmsg'),_infile_));
158 if stoploop=1 then stop;
163 %
if %symexist(SYS_JES_JOB_URI) %then %
do;
166 %
if "X&SYS_JES_JOB_URI.X"=
"XX" %then %
do;
167 filename _webout temp lrecl=999999 mod;
170 filename _webout filesrvc parenturi=
"&SYS_JES_JOB_URI"
171 name=
"_webout.json" lrecl=999999 mod;
174 %
else %
if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %
do;
177 %let fid=%sysfunc(fopen(&fref,A));
178 %
if &fid=0 %then %
do;
179 %put %str(ERR)OR: %sysfunc(sysmsg());
182 %let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));
183 %let rc=%sysfunc(fwrite(&fid));
184 %let rc=%sysfunc(fclose(&fid));
185 %let rc=%sysfunc(filename(&fref));
190 file _webout mod lrecl=32000 encoding=
'utf-8';
191 length msg syswarningtext syserrortext $32767 mode $10 ;
192 sasdatetime=datetime();
194 %
if &logline>0 %then %
do;
195 msg=cats(msg,
'\n\nLog Extract:\n',symget(
'logmsg'));
198 msg=tranwrd(msg,
'\',
'\\');
200 msg=tranwrd(msg,
'"',
'\"');
202 msg=compress(msg,,
'kw');
204 msg=cats(
'"',msg,
'"');
205 if symexist(
'_debug') then debug=quote(trim(symget('_debug')));
207 if symget('sasjsprocessmode')='Stored Program' then mode='SASJS';
208 if mode ne 'SASJS' then put '>>weboutBEGIN<<';
209 put '{
"SYSDATE" :
"' "&SYSDATE
" '"';
210 put ',
"SYSTIME" :
"' "&SYSTIME
" '"';
211 put ',
"sasjsAbort" : [{
';
213 put ' ,
"MAC":
"' "&mac
" '"}]
';
214 put ",""SYSUSERID"" : ""&sysuserid"" ";
215 put ',
"_DEBUG":
' debug ;
216 if symexist('_metauser
') then do;
217 _METAUSER=quote(trim(symget('_METAUSER
')));
218 put ",""_METAUSER"": " _METAUSER;
219 _METAPERSON=quote(trim(symget('_METAPERSON
')));
220 put ',
"_METAPERSON":
' _METAPERSON;
222 if symexist('SYS_JES_JOB_URI
') then do;
223 SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI
')));
224 put ',
"SYS_JES_JOB_URI":
' SYS_JES_JOB_URI;
226 _PROGRAM=quote(trim(resolve(symget('_PROGRAM
'))));
227 put ',
"_PROGRAM" :
' _PROGRAM ;
228 put ",""SYSCC"" : ""&syscc"" ";
229 syserrortext=cats(symget('syserrortext
'));
230 if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do;
231 syserrortext='"'!!trim(
232 prxchange('s/
"/\\"/
',-1, /* double quote */
233 prxchange('s/\x0A/\n/
',-1, /* new line */
234 prxchange('s/\x0D/\r/
',-1, /* carriage return */
235 prxchange('s/\x09/\\t/
',-1, /* tab */
236 prxchange('s/\x00/\\u0000/
',-1, /* NUL */
237 prxchange('s/\x0E/\\u000E/
',-1, /* SS */
238 prxchange('s/\x0F/\\u000F/
',-1, /* SF */
239 prxchange('s/\x01/\\u0001/
',-1, /* SOH */
240 prxchange('s/\x02/\\u0002/
',-1, /* STX */
241 prxchange('s/\x10/\\u0010/
',-1, /* DLE */
242 prxchange('s/\x11/\\u0011/
',-1, /* DC1 */
243 prxchange('s/\x1A/\\u001A/
',-1, /* SUB */
244 prxchange('s/\\/\\\\/
',-1,syserrortext)
247 else syserrortext=cats('"',syserrortext,'"');
248 put ',"SYSERRORTEXT
" : ' syserrortext;
249 put ",
""SYSHOSTNAME
"" :
""&syshostname
"" ";
250 put ",
""SYSJOBID
"" :
""&sysjobid
"" ";
251 put ",
""SYSSCPL
"" :
""&sysscpl
"" ";
252 put ",
""SYSSITE
"" :
""&syssite
"" ";
253 sysvlong=quote(trim(symget('sysvlong')));
254 put ',"SYSVLONG
" : ' sysvlong;
255 syswarningtext=cats(symget('syswarningtext'));
256 if findc(syswarningtext,'"\
'!!'0A0D09000E0F010210111A
'x) then do;
257 syswarningtext='"'!!trim(
258 prxchange('s/"/\\
"/',-1, /* double quote */
259 prxchange('s/\x0A/\n/',-1, /* new line */
260 prxchange('s/\x0D/\r/',-1, /* carriage return */
261 prxchange('s/\x09/\\t/',-1, /* tab */
262 prxchange('s/\x00/\\u0000/',-1, /* NUL */
263 prxchange('s/\x0E/\\u000E/',-1, /* SS */
264 prxchange('s/\x0F/\\u000F/',-1, /* SF */
265 prxchange('s/\x01/\\u0001/',-1, /* SOH */
266 prxchange('s/\x02/\\u0002/',-1, /* STX */
267 prxchange('s/\x10/\\u0010/',-1, /* DLE */
268 prxchange('s/\x11/\\u0011/',-1, /* DC1 */
269 prxchange('s/\x1A/\\u001A/',-1, /* SUB */
270 prxchange('s/\\/\\\\/',-1,syswarningtext)
273 else syswarningtext=cats('"',syswarningtext,'"');
274 put ",""SYSWARNINGTEXT"" : " syswarningtext;
275 put ',
"END_DTTM" :
"' "%sysfunc(datetime(),E8601DT26.6)
" '" ';
277 if mode ne 'SASJS
' then put '>>weboutEND<<
';
282 %if "&sysprocessmode " = "SAS Stored Process Server " %then %do;
284 putlog 'stpsrvset program err and syscc
';
285 rc=stpsrvset('program error
', 0);
286 call symputx("syscc",0,"g");
289 and 1=0 /* deprecating this logic until we figure out a consistent abort */
290 and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"
291 and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;
292 /* skip approach (below) does not work in windows m6+ envs */
306 put '%macro skip();
';
307 comment '%mend skip; -> fix lint
';
308 put '%macro skippy();
';
309 comment '%mend skippy; -> fix lint
';
314 %else %if "&sysprocessmode " = "SAS Compute Server " %then %do;
315 /* endsas kills the session making it harder to fetch results */
317 syswarningtext=symget('syswarningtext
');
318 syserrortext=symget('syserrortext
');
319 abort_msg=symget('msg
');
320 syscc=symget('syscc
');
321 sysuserid=symget('sysuserid
');
322 iftrue=symget('iftrue
');
324 call symputx('syscc
',0);