88 "github.com/statping-ng/statping-ng/types/hits"
99 "github.com/statping-ng/statping-ng/types/services"
1010 "github.com/statping-ng/statping-ng/utils"
11- "dario.cat/mergo"
1211 "net/http"
1312)
1413
@@ -78,7 +77,12 @@ func apiCreateServiceHandler(w http.ResponseWriter, r *http.Request) {
7877type servicePatchReq struct {
7978 Online bool `json:"online"`
8079 Issue string `json:"issue,omitempty"`
81- Latency int64 `json:"latency,omitempty"`
80+ Latency int64 `json:"latency,omitempty"`
81+ }
82+
83+ type serviceOutagePatchReq struct {
84+ IsOutageEnabled bool `json:"is_outage_enabled"`
85+ OutageType string `json:"outage_type"`
8286}
8387
8488func apiServicePatchHandler (w http.ResponseWriter , r * http.Request ) {
@@ -102,7 +106,7 @@ func apiServicePatchHandler(w http.ResponseWriter, r *http.Request) {
102106 }
103107
104108 if ! req .Online {
105- services .RecordFailure (service , issueDefault , "trigger" , service . OutageType )
109+ services .RecordFailure (service , issueDefault , "trigger" , "offline" )
106110 } else {
107111 services .RecordSuccess (service )
108112 }
@@ -115,39 +119,55 @@ func apiServicePatchHandler(w http.ResponseWriter, r *http.Request) {
115119 sendJsonAction (service , "update" , w , r )
116120}
117121
118- func apiServiceUpdateHandler (w http.ResponseWriter , r * http.Request ) {
122+ func apiServiceOutagePatchHandler (w http.ResponseWriter , r * http.Request ) {
119123 service , err := findService (r )
120124 if err != nil {
121125 sendErrorJson (err , w , r )
122126 return
123127 }
124-
125- var updateData services.Service
126- if err := DecodeJSON (r , & updateData ); err != nil {
128+ var req serviceOutagePatchReq
129+ if err := DecodeJSON (r , & req ); err != nil {
127130 sendErrorJson (err , w , r )
128131 return
129132 }
130133
131- // Merge updateData in service by overriding the values
132- if err := mergo .Merge (service , updateData , mergo .WithOverride , mergo .WithOverwriteWithEmptyValue ); err != nil {
134+ service .IsOutageEnabled = req .IsOutageEnabled
135+ service .OutageType = req .OutageType
136+
137+ issueDefault := "Service was triggered to be outaged"
138+
139+ if req .IsOutageEnabled {
140+ services .RecordFailure (service , issueDefault , "trigger" , service .OutageType )
141+ } else {
142+ services .RecordSuccess (service )
143+ }
144+
145+ if err := service .Update (); err != nil {
133146 sendErrorJson (err , w , r )
134147 return
135148 }
136149
150+ sendJsonAction (service , "update" , w , r )
151+ }
152+
153+ func apiServiceUpdateHandler (w http.ResponseWriter , r * http.Request ) {
154+ service , err := findService (r )
155+ if err != nil {
156+ sendErrorJson (err , w , r )
157+ return
158+ }
159+ if err := DecodeJSON (r , & service ); err != nil {
160+ sendErrorJson (err , w , r )
161+ return
162+ }
137163 if err := service .Update (); err != nil {
138164 sendErrorJson (err , w , r )
139165 return
140166 }
141167 go service .CheckService (true )
142- log .Info ("Service updated: " , service )
143- if service .IsOutageEnabled {
144- services .RecordFailure (service , "Outage set (" + service .OutageType + ")" , "outage" , service .OutageType )
145- }
146-
147168 sendJsonAction (service , "update" , w , r )
148169}
149170
150-
151171func apiServiceDataHandler (w http.ResponseWriter , r * http.Request ) {
152172 service , err := findService (r )
153173 if err != nil {
0 commit comments