@@ -3,7 +3,6 @@ package main
33import (
44 "bytes"
55 "encoding/json"
6- "errors"
76 "fmt"
87 "io"
98 "log"
@@ -51,7 +50,7 @@ func syncWorker(syncRecord map[string]any) error {
5150 if val , ok := syncRecord ["uuid" ]; ok {
5251 suuid = fmt .Sprintf ("%s" , val )
5352 } else {
54- return errors . New ( fmt .Sprintf ("Unable to obtain UUID of sync record %+v" , syncRecord ) )
53+ return fmt .Errorf ("Unable to obtain UUID of sync record %+v" , syncRecord )
5554 }
5655 if err := updateMetadataRecords (syncRecord ); err != nil {
5756 return err
@@ -82,67 +81,73 @@ func syncWorker(syncRecord map[string]any) error {
8281 return nil
8382}
8483
84+ // helper function to update provenance records
8585func updateProvenanceRecords (syncRecord map [string ]any ) error {
86- // obtain all FOXDEN provenance records from source FOXDEN instance
87- // send PUT request to target FOXDEN instance with all provenance records
88- if surl , ok := syncRecord ["source_url" ]; ok {
89- spec := make (map [string ]any )
90- rurl := fmt .Sprintf ("%s/provenance" , surl )
91- rec := services.ServiceRequest {
92- Client : "foxden-sync" ,
93- ServiceQuery : services.ServiceQuery {Spec : spec },
94- }
95- data , err := json .Marshal (rec )
96- if err != nil {
97- return err
98- }
99- resp , err := _httpReadRequest .Post (rurl , "application/json" , bytes .NewBuffer (data ))
100- if err != nil {
101- return err
102- }
103- defer resp .Body .Close ()
104- data , err = io .ReadAll (resp .Body )
105- if err != nil {
106- return err
107- }
108- var records []map [string ]any
109- err = json .Unmarshal (data , & records )
110- if err != nil {
111- return err
112- }
113- }
114- return nil
86+ return updateRecords ("provenance" , syncRecord )
11587}
11688
89+ // helper function to update metadata records
11790func updateMetadataRecords (syncRecord map [string ]any ) error {
118- // obtain all FOXDEN metadata records from source FOXDEN instance
119- if surl , ok := syncRecord ["source_url" ]; ok {
120- spec := make (map [string ]any )
121- rurl := fmt .Sprintf ("%s/search" , surl )
122- rec := services.ServiceRequest {
123- Client : "foxden-sync" ,
124- ServiceQuery : services.ServiceQuery {Spec : spec },
125- }
126- data , err := json .Marshal (rec )
127- if err != nil {
128- return err
129- }
130- resp , err := _httpReadRequest .Post (rurl , "application/json" , bytes .NewBuffer (data ))
131- if err != nil {
132- return err
133- }
134- defer resp .Body .Close ()
135- data , err = io .ReadAll (resp .Body )
91+ return updateRecords ("metadata" , syncRecord )
92+ }
93+
94+ // helper function to update records in FOXDEN
95+ func updateRecords (srv string , syncRecord map [string ]any ) error {
96+ var records []map [string ]any
97+ var err error
98+ // obtain all FOXDEN records from source FOXDEN instance
99+ if val , ok := syncRecord ["source_url" ]; ok {
100+ surl := fmt .Sprintf ("%s" , val )
101+ records , err = getRecords (srv , surl )
136102 if err != nil {
137103 return err
138104 }
139- var records []map [string ]any
140- err = json .Unmarshal (data , & records )
105+ }
106+ // send PUT request to target FOXDEN isntance with all metadata records
107+ if val , ok := syncRecord ["target_url" ]; ok {
108+ turl := fmt .Sprintf ("%s" , val )
109+ err := pushRecords (srv , turl , records )
141110 if err != nil {
142111 return err
143112 }
144113 }
145- // send PUT request to target FOXDEN isntance with all metadata records
146- // update sync record with SyncMetadata status code
147114 return nil
148115}
116+
117+ // helper function to push FOXDEN records to upstream target url
118+ func pushRecords (srv , turl string , records []map [string ]any ) error {
119+ log .Println (srv , turl , records )
120+ return nil
121+ }
122+
123+ // helper function to get records from given FOXDEN instance
124+ func getRecords (srv , surl string ) ([]map [string ]any , error ) {
125+ var records []map [string ]any
126+ spec := make (map [string ]any )
127+ rurl := fmt .Sprintf ("%s/search" , surl )
128+ if srv == "provenance" {
129+ rurl = fmt .Sprintf ("%s/provenance" , surl )
130+ }
131+ rec := services.ServiceRequest {
132+ Client : "foxden-sync" ,
133+ ServiceQuery : services.ServiceQuery {Spec : spec },
134+ }
135+ data , err := json .Marshal (rec )
136+ if err != nil {
137+ return records , err
138+ }
139+ resp , err := _httpReadRequest .Post (rurl , "application/json" , bytes .NewBuffer (data ))
140+ if err != nil {
141+ return records , err
142+ }
143+ defer resp .Body .Close ()
144+ data , err = io .ReadAll (resp .Body )
145+ if err != nil {
146+ return records , err
147+ }
148+ err = json .Unmarshal (data , & records )
149+ if err != nil {
150+ return records , err
151+ }
152+ return records , nil
153+ }
0 commit comments