2017-05-19 12:24:28 +00:00
/ *
Copyright 2017 Rohith All rights reserved .
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
package marathon
2017-05-19 12:24:28 +00:00
import (
"encoding/json"
"fmt"
)
const UnreachableStrategyAbsenceReasonDisabled = "disabled"
2017-05-19 12:24:28 +00:00
// UnreachableStrategy is the unreachable strategy applied to an application.
type UnreachableStrategy struct {
2017-05-19 12:24:28 +00:00
EnabledUnreachableStrategy
AbsenceReason string
}
// EnabledUnreachableStrategy covers parameters pertaining to present unreachable strategies.
type EnabledUnreachableStrategy struct {
2017-05-19 12:24:28 +00:00
InactiveAfterSeconds * float64 ` json:"inactiveAfterSeconds,omitempty" `
ExpungeAfterSeconds * float64 ` json:"expungeAfterSeconds,omitempty" `
}
2017-05-19 12:24:28 +00:00
type unreachableStrategy UnreachableStrategy
// UnmarshalJSON unmarshals the given JSON into an UnreachableStrategy. It
// populates parameters for present strategies, and otherwise only sets the
// absence reason.
func ( us * UnreachableStrategy ) UnmarshalJSON ( b [ ] byte ) error {
var u unreachableStrategy
var errEnabledUS , errNonEnabledUS error
if errEnabledUS = json . Unmarshal ( b , & u ) ; errEnabledUS == nil {
* us = UnreachableStrategy ( u )
return nil
}
if errNonEnabledUS = json . Unmarshal ( b , & us . AbsenceReason ) ; errNonEnabledUS == nil {
return nil
}
return fmt . Errorf ( "failed to unmarshal unreachable strategy: unmarshaling into enabled returned error '%s'; unmarshaling into non-enabled returned error '%s'" , errEnabledUS , errNonEnabledUS )
}
// MarshalJSON marshals the unreachable strategy.
func ( us * UnreachableStrategy ) MarshalJSON ( ) ( [ ] byte , error ) {
if us . AbsenceReason == "" {
return json . Marshal ( us . EnabledUnreachableStrategy )
}
return json . Marshal ( us . AbsenceReason )
}
2017-05-19 12:24:28 +00:00
// SetInactiveAfterSeconds sets the period after which instance will be marked as inactive.
func ( us UnreachableStrategy ) SetInactiveAfterSeconds ( cap float64 ) UnreachableStrategy {
us . InactiveAfterSeconds = & cap
return us
}
// SetExpungeAfterSeconds sets the period after which instance will be expunged.
func ( us UnreachableStrategy ) SetExpungeAfterSeconds ( cap float64 ) UnreachableStrategy {
us . ExpungeAfterSeconds = & cap
return us
}