156 lines
4.2 KiB
Go
156 lines
4.2 KiB
Go
|
/**
|
||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||
|
* or more contributor license agreements. See the NOTICE file
|
||
|
* distributed with this work for additional information
|
||
|
* regarding copyright ownership. The ASF licenses this file
|
||
|
* to you 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 mesosutil
|
||
|
|
||
|
import (
|
||
|
"github.com/gogo/protobuf/proto"
|
||
|
mesos "github.com/mesos/mesos-go/mesosproto"
|
||
|
)
|
||
|
|
||
|
func NewValueRange(begin, end uint64) *mesos.Value_Range {
|
||
|
return &mesos.Value_Range{Begin: proto.Uint64(begin), End: proto.Uint64(end)}
|
||
|
}
|
||
|
|
||
|
func FilterResources(resources []*mesos.Resource, filter func(*mesos.Resource) bool) (result []*mesos.Resource) {
|
||
|
for _, resource := range resources {
|
||
|
if filter(resource) {
|
||
|
result = append(result, resource)
|
||
|
}
|
||
|
}
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
func NewScalarResource(name string, val float64) *mesos.Resource {
|
||
|
return &mesos.Resource{
|
||
|
Name: proto.String(name),
|
||
|
Type: mesos.Value_SCALAR.Enum(),
|
||
|
Scalar: &mesos.Value_Scalar{Value: proto.Float64(val)},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewRangesResource(name string, ranges []*mesos.Value_Range) *mesos.Resource {
|
||
|
return &mesos.Resource{
|
||
|
Name: proto.String(name),
|
||
|
Type: mesos.Value_RANGES.Enum(),
|
||
|
Ranges: &mesos.Value_Ranges{Range: ranges},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewSetResource(name string, items []string) *mesos.Resource {
|
||
|
return &mesos.Resource{
|
||
|
Name: proto.String(name),
|
||
|
Type: mesos.Value_SET.Enum(),
|
||
|
Set: &mesos.Value_Set{Item: items},
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
func NewFrameworkID(id string) *mesos.FrameworkID {
|
||
|
return &mesos.FrameworkID{Value: proto.String(id)}
|
||
|
}
|
||
|
|
||
|
func NewFrameworkInfo(user, name string, frameworkId *mesos.FrameworkID) *mesos.FrameworkInfo {
|
||
|
return &mesos.FrameworkInfo{
|
||
|
User: proto.String(user),
|
||
|
Name: proto.String(name),
|
||
|
Id: frameworkId,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewMasterInfo(id string, ip, port uint32) *mesos.MasterInfo {
|
||
|
return &mesos.MasterInfo{
|
||
|
Id: proto.String(id),
|
||
|
Ip: proto.Uint32(ip),
|
||
|
Port: proto.Uint32(port),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewOfferID(id string) *mesos.OfferID {
|
||
|
return &mesos.OfferID{Value: proto.String(id)}
|
||
|
}
|
||
|
|
||
|
func NewOffer(offerId *mesos.OfferID, frameworkId *mesos.FrameworkID, slaveId *mesos.SlaveID, hostname string) *mesos.Offer {
|
||
|
return &mesos.Offer{
|
||
|
Id: offerId,
|
||
|
FrameworkId: frameworkId,
|
||
|
SlaveId: slaveId,
|
||
|
Hostname: proto.String(hostname),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func FilterOffersResources(offers []*mesos.Offer, filter func(*mesos.Resource) bool) (result []*mesos.Resource) {
|
||
|
for _, offer := range offers {
|
||
|
result = FilterResources(offer.Resources, filter)
|
||
|
}
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
func NewSlaveID(id string) *mesos.SlaveID {
|
||
|
return &mesos.SlaveID{Value: proto.String(id)}
|
||
|
}
|
||
|
|
||
|
func NewTaskID(id string) *mesos.TaskID {
|
||
|
return &mesos.TaskID{Value: proto.String(id)}
|
||
|
}
|
||
|
|
||
|
func NewTaskInfo(
|
||
|
name string,
|
||
|
taskId *mesos.TaskID,
|
||
|
slaveId *mesos.SlaveID,
|
||
|
resources []*mesos.Resource,
|
||
|
) *mesos.TaskInfo {
|
||
|
return &mesos.TaskInfo{
|
||
|
Name: proto.String(name),
|
||
|
TaskId: taskId,
|
||
|
SlaveId: slaveId,
|
||
|
Resources: resources,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewTaskStatus(taskId *mesos.TaskID, state mesos.TaskState) *mesos.TaskStatus {
|
||
|
return &mesos.TaskStatus{
|
||
|
TaskId: taskId,
|
||
|
State: mesos.TaskState(state).Enum(),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewStatusUpdate(frameworkId *mesos.FrameworkID, taskStatus *mesos.TaskStatus, timestamp float64, uuid []byte) *mesos.StatusUpdate {
|
||
|
return &mesos.StatusUpdate{
|
||
|
FrameworkId: frameworkId,
|
||
|
Status: taskStatus,
|
||
|
Timestamp: proto.Float64(timestamp),
|
||
|
Uuid: uuid,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func NewCommandInfo(command string) *mesos.CommandInfo {
|
||
|
return &mesos.CommandInfo{Value: proto.String(command)}
|
||
|
}
|
||
|
|
||
|
func NewExecutorID(id string) *mesos.ExecutorID {
|
||
|
return &mesos.ExecutorID{Value: proto.String(id)}
|
||
|
}
|
||
|
|
||
|
func NewExecutorInfo(execId *mesos.ExecutorID, command *mesos.CommandInfo) *mesos.ExecutorInfo {
|
||
|
return &mesos.ExecutorInfo{
|
||
|
ExecutorId: execId,
|
||
|
Command: command,
|
||
|
}
|
||
|
}
|