package Ġcom . tencent . bk . devops . atom . task Ċ Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġcom . google . common . collect . Maps Ċ import Ġcom . tencent . bk . devops . atom . api . Base Api Ċ import Ġcom . tencent . bk . devops . atom . exception . Atom Exception Ċ import Ġcom . tencent . bk . devops . atom . pojo . Atom Base Param Ċ import Ġcom . tencent . bk . devops . atom . pojo . Result Ċ import Ġcom . tencent . bk . devops . atom . task . Json Utils . object Mapper Ċ import Ġokhttp 3 . MediaType Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . RequestBody Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . File Ċ Ċ class ĠArchive Api Ġ: ĠBase Api () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġatom HttpClient Ġ= ĠAtom HttpClient () ĊĊĠĠĠ Ġfun Ġupload Bk Repo Report File ( file : ĠFile , Ġelement Id : ĠString , Ġrelative Path : ĠString , Ġatom Base Param : ĠAtom Base Param ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġatom HttpClient . build Atom Put ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ bk repo / api / build / generic /${ atom Base Param . projectName }/ report /${ atom Base Param . pipeline Id }/${ atom Base Param . pipeline Build Id }/ $ element Id /${ relative Path . remove Prefix ("/") }", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Body . create ( MediaType . parse (" application / octet - stream "), Ġfile ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Bk Repo Upload Header ( file , Ġatom Base Param ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġupload File ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate ( element Id : ĠString , Ġindex File : ĠString , Ġname : ĠString , Ġreport Type : ĠString ? Ġ= ĠReport TypeEnum . INTERNAL . name ): ĠResult < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"/ process / api / build / reports /$ element Id ? index File =${ encode ( index File )} & name =${ encode ( name )} & report Type =$ report Type " Ċ // ĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġif Ġ( report Email Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Post ( path ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= ĠRequest Body . create ( MediaType . parse (" application / json ; Ġcharset = utf - 8 "), ĠobjectMapper . writeValue AsString ( report Email )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Post ( path , Ġrequest Body , ĠMaps . new HashMap ()) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresponse Content Ġ= Ġrequest ( build Post ( path ), Ġ" åĪĽå»º æĬ¥ åĳĬ å¤±è´¥ ") ĊĠĠĠĠĠĠĠ Ġreturn ĠobjectMapper . readValue ( response Content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupload Bk Repo Custom File ( file : ĠFile , Ġdest Path : ĠString , Ġatom Base Param : ĠAtom Base Param ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbk repo Path Ġ= Ġ( dest Path . remove Suffix ("/") Ġ+ Ġ"/" Ġ+ Ġfile . name ). remove Prefix ("/ "). remove Prefix ("./ ") ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġatom HttpClient . build Atom Put ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ bk repo / api / build / generic /${ atom Base Param . projectName }/ custom /$ bk repo Path ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Body . create ( MediaType . parse (" application / octet - stream "), Ġfile ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Bk Repo Upload Header ( file , Ġatom Base Param ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġupload File ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupload Bk Repo Pipeline File ( file : ĠFile , Ġatom Base Param : ĠAtom Base Param ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġbuild Put ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ bk repo / api / build / generic /${ atom Base Param . projectName }/ pipeline /${ atom Base Param . pipeline Id }/${ atom Base Param . pipeline Build Id }/${ file . name }", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Body . create ( MediaType . parse (" application / octet - stream "), Ġfile ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Bk Repo Upload Header ( file , Ġatom Base Param ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġupload File ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupload File ( request : ĠRequest , Ġretry : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġatom HttpClient . do Request ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" upload Ġfile Ġfailed , Ġcode : Ġ${ response . code ()}, Ġresponse Content : Ġ${ response . body () !!. string () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAtom Exception (" upload Ġfile Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" upload Ġfile Ġerror , Ġcause : Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! retry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" retry Ġafter Ġ 3 Ġseconds ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 3 Ġ* Ġ 1 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload File ( request , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Root Url ( element Id : ĠString ): ĠResult < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"/ process / api / build / reports /$ element Id / root Url " ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġbuild Get ( path ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Content Ġ= Ġrequest ( request , Ġ" èİ·åıĸ æĬ¥ åĳĬ è·Ł è·¯å¾Ħ å¤±è´¥ ") ĊĠĠĠĠĠĠĠ Ġreturn ĠobjectMapper . readValue ( response Content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bk Repo Upload Header ( file : ĠFile , Ġatom Param : ĠAtom Base Param ): ĠHashMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheader Ġ= ĠMaps . new HashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġheader [ BK REPO _ METADATA _ PREFIX Ġ+ ĠARCH IVE _ PRO PS _ PROJECT _ ID ] Ġ= Ġatom Param . projectName ĊĠĠĠĠĠĠĠ Ġheader [ BK REPO _ METADATA _ PREFIX Ġ+ ĠARCH IVE _ PRO PS _ PIPELINE _ ID ] Ġ= Ġatom Param . pipeline Id ĊĠĠĠĠĠĠĠ Ġheader [ BK REPO _ METADATA _ PREFIX Ġ+ ĠARCH IVE _ PRO PS _ BUILD _ ID ] Ġ= Ġatom Param . pipeline Build Id ĊĠĠĠĠĠĠĠ Ġheader [ BK REPO _ METADATA _ PREFIX Ġ+ ĠARCH IVE _ PRO PS _ USER _ ID ] Ġ= Ġatom Param . pipeline Start UserName ĊĠĠĠĠĠĠĠ Ġheader [ BK REPO _ METADATA _ PREFIX Ġ+ ĠARCH IVE _ PRO PS _ BUILD _ NO ] Ġ= Ġatom Param . pipeline Build Num ĊĠĠĠĠĠĠĠ Ġheader [ BK REPO _ METADATA _ PREFIX Ġ+ ĠARCH IVE _ PRO PS _ SOURCE ] Ġ= Ġ" pipeline " ĊĠĠĠĠĠĠĠ Ġheader [ BK REPO _ UID ] Ġ= Ġatom Param . pipeline Start UserName ĊĠĠĠĠĠĠĠ Ġheader [ BK REPO _ OVERRIDE ] Ġ= Ġ" true " ĊĠĠĠĠĠĠĠ Ġreturn Ġheader ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Archive Api :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARCH IVE _ PRO PS _ PROJECT _ ID Ġ= Ġ" projectId " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARCH IVE _ PRO PS _ PIPELINE _ ID Ġ= Ġ" pipeline Id " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARCH IVE _ PRO PS _ BUILD _ ID Ġ= Ġ" build Id " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARCH IVE _ PRO PS _ BUILD _ NO Ġ= Ġ" build No " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARCH IVE _ PRO PS _ USER _ ID Ġ= Ġ" userId " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARCH IVE _ PRO PS _ SOURCE Ġ= Ġ" source " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB K REPO _ METADATA _ PREFIX Ġ= Ġ" X - BK REPO - META -" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB K REPO _ UID Ġ= Ġ" X - BK REPO - UID " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠB K REPO _ OVERRIDE Ġ= Ġ" X - BK REPO - OVER WRITE " ĊĠĠĠ Ġ} Ċ }