(:~ : Report library. : : @author Rave Technologies, https://www.rave-tech.com/, 2017 :) module namespace report = 'http://www.rave-tech.com/bloomsbury/report'; import module namespace config = 'http://www.rave-tech.com/bloomsbury/config' at './module/config.xqm'; import module namespace contents = 'http://www.rave-tech.com/bloomsbury/contents' at 'content.xqm'; import module namespace blcommon = 'http://www.rave-tech.com/bloomsbury/common' at 'common.xqm'; declare namespace pipeline = 'http://cms.bloomsbury.com/pipeline'; (:~ : Update check-in information into the report : @param $outputFileName File name to match of the report : @param $jobID ID of the job to ingest report : @param $cid Content ID : @return empty sequence :) declare %updating function report:update-checkin-info( $outputFileName as xs:string, $jobID as xs:string, $cid as xs:string, $ctype as xs:string ) { insert node Yes as last into db:open(blcommon:get-db-name($ctype),fn:concat($config:JobDir,$jobID,'.xml'))/job/job-info/lock/file[fn:contains(fn:tokenize(uri,'/')[fn:last()],fn:replace($outputFileName,'.docx','.xml'))] [fn:tokenize(uri,'/')[4]=$cid] }; (:~ : Append error report to the specific job. : @param $jobID ID of the job to update status : @param $stepReport The step information to record : @return empty sequence :) declare %updating function report:update( $jobID as xs:string, $stepReport as element(step), $ctype as xs:string ) { insert node $stepReport as last into db:open(blcommon:get-db-name($ctype),fn:concat($config:JobDir,$jobID,'.xml'))/job/ingestion-report/steps }; (:~ : Append final status of the report. : @param $jobID ID of the job to update status : @param $ignoreValidation Ignore validation if error happens : @param $contentID ID of the content : @return empty sequence :) declare %updating function report:update-final-status( $jobID as xs:string, $ignoreValidation as xs:string, $contentID as xs:string, $ctype as xs:string ) { let $jobXml := db:open(blcommon:get-db-name($ctype),fn:concat($config:JobDir,$jobID,'.xml')) return if($jobXml/job/ingestion-report/status[.='InProgress'] or $jobXml/job/ingestion-report/status[.='']) then ( if($jobXml/job/ingestion-report/steps/step/error/*) then if($ignoreValidation='true') then replace node $jobXml/job/ingestion-report/status with SuccessWithWarnings else ( replace node $jobXml/job/ingestion-report/status with Failure , (: delete all ingested content, as some files has error :) db:delete(blcommon:get-db-name($ctype),fn:concat($config:ContentDir,$contentID)) ) else replace node $jobXml/job/ingestion-report/status with Success (:, admin:write-log(fn:concat('[',$jobID,'][***************************Job Finished***************************]')):) ) else () }; (:~ : Append finished time of the report. : @param $jobID ID of the job to update status : @return empty sequence :) declare %updating function report:update-final-time( $jobID as xs:string, $ctype as xs:string ) { let $jobXml := db:open(blcommon:get-db-name($ctype),fn:concat($config:JobDir,$jobID,'.xml')) return if($jobXml/job/ingestion-report/finished-on[.='']) then replace node $jobXml/job/ingestion-report/finished-on with {fn:adjust-dateTime-to-timezone(convert:integer-to-dateTime(prof:current-ms()))} else () }; (:~ : Get Ingest or Publish report : @param $id ID of the report : @result element(result) :) declare %rest:path("/reports/{$id=.+}") %rest:GET %rest:header-param("Authorization", "{$authorization}", "none") %rest:consumes("application/xml", "text/xml") function report:info( $id as xs:string, $authorization as xs:string ) { config:session-check($authorization), try { let $job := db:open($config:CoreDatabase,$config:JobDir)/job[job-info/id=$id] return if($job) then SuccessReport is available{$job} else FailureReport is unavailable } catch * { admin:write-log("[Report][Error: " || $err:description || "]"), admin:write-log("[Report][Error: " || $err:additional || "]"), ErrorError generated. Please check system log } };