@@ -30,6 +30,10 @@ type DcsLoaderService struct {
3030 logger * logger.Logger
3131}
3232
33+ const (
34+ API_VERSION_PREFIX = "/v4"
35+ )
36+
3337func NewDcsLoaderService (apiClient * http.Client , cfg * config.DcsLoaderConfig , logger * logger.Logger ) * DcsLoaderService {
3438 return & DcsLoaderService {apiClient , cfg , logger }
3539}
@@ -40,7 +44,16 @@ func (s *DcsLoaderService) PostMeasurementCollectionToApi(ctx context.Context, m
4044 return err
4145 }
4246
43- req , err := http .NewRequestWithContext (ctx , http .MethodPost , fmt .Sprintf ("%s/timeseries_measurements?key=%s" , s .cfg .ApiHost , s .cfg .APIKey ), bytes .NewReader (requestBodyBytes ))
47+ base , err := url .Parse (s .cfg .ApiHost )
48+ if err != nil {
49+ return fmt .Errorf ("invalid api host: %w" , err )
50+ }
51+ base .Path = API_VERSION_PREFIX + "/timeseries_measurements"
52+ q := base .Query ()
53+ q .Set ("key" , s .cfg .APIKey )
54+ base .RawQuery = q .Encode ()
55+
56+ req , err := http .NewRequestWithContext (ctx , http .MethodPost , base .String (), bytes .NewReader (requestBodyBytes ))
4457 if err != nil {
4558 return err
4659 }
@@ -50,35 +63,39 @@ func (s *DcsLoaderService) PostMeasurementCollectionToApi(ctx context.Context, m
5063 }
5164 }()
5265
53- req .Header .Add ("Content-Type" , "application/json" )
66+ req .Header .Set ("Content-Type" , "application/json" )
5467
5568 resp , err := s .apiClient .Do (req )
5669 if err != nil {
57- urlErr := err .(* url.Error )
58- u , pErr := url .Parse (urlErr .URL )
59- if pErr != nil || u == nil {
60- return errors .New ("unable to parse url string" )
70+ var urlErr * url.Error
71+ if errors .As (err , & urlErr ) {
72+ if u , pErr := url .Parse (urlErr .URL ); pErr == nil && u != nil {
73+ util .RedactQueryParams (u , "key" )
74+ urlErr .URL = u .String ()
75+ }
76+ s .logger .Error (ctx , "unable to make request" , "error" , urlErr )
77+ return urlErr
6178 }
62- util .RedactQueryParams (u , "key" )
63- urlErr .URL = u .String ()
64- s .logger .Error (ctx , "unable to make request" , "error" , urlErr )
65- return urlErr
79+ s .logger .Error (ctx , "unable to make request" , "error" , err )
80+ return err
6681 }
6782 defer func () {
6883 if err := resp .Body .Close (); err != nil {
6984 s .logger .Error (ctx , "error closing response body" , "error" , err )
7085 }
7186 }()
7287
73- if resp .StatusCode != 201 {
88+ if resp .StatusCode != http . StatusCreated {
7489 if resp .StatusCode == http .StatusBadRequest {
7590 s .logger .Info (ctx , "timeseries_id foreign key does not exist for upload" ,
7691 "id" , resp .Header .Get ("X-Request-Id" ),
7792 "status" , http .StatusNotFound ,
7893 )
7994 return nil
8095 }
96+ return fmt .Errorf ("expected http %d, got %d" , http .StatusCreated , resp .StatusCode )
8197 }
98+
8299 return nil
83100}
84101
@@ -87,11 +104,22 @@ func (s *DcsLoaderService) PostSeisMeasurementCollectionToApi(ctx context.Contex
87104 log .Print ("no measurements to post" )
88105 return nil
89106 }
107+
90108 requestBodyBytes , err := json .Marshal (mcs )
91109 if err != nil {
92110 return err
93111 }
94- req , err := http .NewRequestWithContext (ctx , http .MethodPost , fmt .Sprintf ("%s/timeseries_measurements_seis?key=%s" , s .cfg .ApiHost , s .cfg .APIKey ), bytes .NewReader (requestBodyBytes ))
112+
113+ base , err := url .Parse (s .cfg .ApiHost )
114+ if err != nil {
115+ return fmt .Errorf ("invalid api host: %w" , err )
116+ }
117+ base .Path = API_VERSION_PREFIX + "/timeseries_measurements_seis"
118+ q := base .Query ()
119+ q .Set ("key" , s .cfg .APIKey )
120+ base .RawQuery = q .Encode ()
121+
122+ req , err := http .NewRequestWithContext (ctx , http .MethodPost , base .String (), bytes .NewReader (requestBodyBytes ))
95123 if err != nil {
96124 return err
97125 }
@@ -101,35 +129,45 @@ func (s *DcsLoaderService) PostSeisMeasurementCollectionToApi(ctx context.Contex
101129 }
102130 }()
103131
104- req .Header .Add ("Content-Type" , "application/json" )
132+ req .Header .Set ("Content-Type" , "application/json" )
105133
106134 resp , err := s .apiClient .Do (req )
107135 if err != nil {
108- urlErr := err .(* url.Error )
109- u , pErr := url .Parse (urlErr .URL )
110- if pErr != nil || u == nil {
111- return errors .New ("unable to parse url string" )
136+ var urlErr * url.Error
137+ if errors .As (err , & urlErr ) {
138+ if u , pErr := url .Parse (urlErr .URL ); pErr == nil && u != nil {
139+ util .RedactQueryParams (u , "key" )
140+ urlErr .URL = u .String ()
141+ }
142+ s .logger .Error (ctx , "unable to make request" , "error" , urlErr )
143+ return urlErr
112144 }
113- util .RedactQueryParams (u , "key" )
114- urlErr .URL = u .String ()
115- s .logger .Error (ctx , "unable to make request" , "error" , urlErr )
116- return urlErr
145+ s .logger .Error (ctx , "unable to make request" , "error" , err )
146+ return err
117147 }
118148 defer func () {
119149 if err := resp .Body .Close (); err != nil {
120150 s .logger .Error (ctx , "error closing response body" , "error" , err )
121151 }
122152 }()
123153
124- if resp .StatusCode != 201 {
125- s .logger .Error (ctx , "request was unsuccessful" , "error" , fmt .Errorf ("expected HTTP response code 201, got %d" , resp .StatusCode ))
154+ if resp .StatusCode != http .StatusCreated {
155+ s .logger .Error (ctx , "request was unsuccessful" ,
156+ "error" , fmt .Errorf ("expected http %d, got %d" , http .StatusCreated , resp .StatusCode ),
157+ )
158+
126159 body , err := io .ReadAll (resp .Body )
127160 if err != nil {
128- s .logger .Error (ctx , "Error reading response body" , "error" , err )
161+ s .logger .Error (ctx , "error reading response body" , "error" , err )
129162 return err
130163 }
131- s .logger .Debug (ctx , "http response" , "body" , fmt .Sprintf ("%s" , body ))
164+ if len (body ) > 0 {
165+ s .logger .Debug (ctx , "http response" , "body" , string (body ))
166+ }
167+
168+ return fmt .Errorf ("expected http %d, got %d" , http .StatusCreated , resp .StatusCode )
132169 }
170+
133171 return nil
134172}
135173
0 commit comments