mirror of
https://github.com/yldio/copilot.git
synced 2024-11-30 23:20:06 +02:00
300 lines
5.9 KiB
GraphQL
300 lines
5.9 KiB
GraphQL
type Portal {
|
|
id: ID!
|
|
user: User!
|
|
datacenter: Datacenter!
|
|
deploymentGroups(name: String, slug: String): [DeploymentGroup]
|
|
}
|
|
|
|
type User {
|
|
id: ID!
|
|
firstName: String!
|
|
lastName: String!
|
|
email: String!
|
|
login: String!
|
|
}
|
|
|
|
enum DeploymentGroupStatus {
|
|
ACTIVE
|
|
PROVISIONING
|
|
DELETING
|
|
DELETED
|
|
UNKNOWN
|
|
}
|
|
|
|
type DeploymentGroup {
|
|
id: ID!
|
|
name: String!
|
|
slug: String!
|
|
services(name: String, slug: String): [Service]
|
|
version: Version
|
|
history: [Version]
|
|
imported: Boolean
|
|
status: DeploymentGroupStatus
|
|
}
|
|
|
|
type ServiceScale {
|
|
id: ID!
|
|
serviceName: String!
|
|
replicas: Int!
|
|
}
|
|
|
|
enum ConvergenceActionType {
|
|
NOOP
|
|
CREATE
|
|
RECREATE
|
|
REMOVE
|
|
START
|
|
EXISTING # special status to mark existing ids in previous version
|
|
}
|
|
|
|
type ConvergenceAction {
|
|
id: ID!
|
|
type: ConvergenceActionType!
|
|
service: String! # service name
|
|
toProcess: Int # merely used for book keeping
|
|
processed: [String] # merely used for book keeping
|
|
machines: [String]! # current instance machine ids
|
|
}
|
|
|
|
type Version {
|
|
id: ID!
|
|
manifest: Manifest
|
|
scale(serviceName: String): [ServiceScale]
|
|
plan: [ConvergenceAction]
|
|
hasPlan: Boolean
|
|
error: String
|
|
}
|
|
|
|
enum ManifestType {
|
|
COMPOSE
|
|
MARIPOSA
|
|
}
|
|
|
|
enum ManifestFormat {
|
|
JSON
|
|
YAML
|
|
}
|
|
|
|
type KeyValue {
|
|
id: ID!
|
|
name: String!
|
|
value: String!
|
|
}
|
|
|
|
input KeyValueInput {
|
|
id: ID
|
|
name: String!
|
|
value: String!
|
|
}
|
|
|
|
type Manifest {
|
|
id: ID!
|
|
type: ManifestType!
|
|
format: ManifestFormat!
|
|
environment: String!
|
|
files: [KeyValue]
|
|
raw: String!
|
|
}
|
|
|
|
enum ServiceStatus {
|
|
ACTIVE # this doesn't mean that the instances are all running
|
|
PROVISIONING
|
|
SCALING
|
|
STOPPING
|
|
STOPPED
|
|
DELETING
|
|
DELETED
|
|
RESTARTING
|
|
UNKNOWN
|
|
}
|
|
|
|
type ServiceConfig {
|
|
id: ID!
|
|
package: Package # we don't have this in current mock data
|
|
environment: [KeyValue]
|
|
image: String # used only for config
|
|
labels: [KeyValue]
|
|
ports: [String]
|
|
}
|
|
|
|
# immutable
|
|
type Service {
|
|
id: ID! # unique id for db row
|
|
hash: String # unique id for version of service
|
|
name: String! # human readable name
|
|
slug: String!
|
|
instances(name: String, machineId: ID, status: InstanceStatus): [Instance]!
|
|
connections: [String] # list of serviceIds
|
|
branches(name: String, slug: String): [Service]
|
|
config: ServiceConfig
|
|
status: ServiceStatus
|
|
}
|
|
|
|
# for metrics max / min (I guess)
|
|
type Package {
|
|
id: ID!
|
|
name: String!
|
|
type: String!
|
|
memory: Float!
|
|
disk: Float!
|
|
swap: Float!
|
|
lwps: Int!
|
|
vcpus: Int!
|
|
version: String!
|
|
group: String!
|
|
}
|
|
|
|
enum InstanceStatus {
|
|
PROVISIONING
|
|
READY
|
|
ACTIVE # vm only: When used in ListVms, denotes machines that are not 'destroyed' or 'failed'
|
|
RUNNING
|
|
STOPPING
|
|
STOPPED
|
|
OFFLINE
|
|
DELETED
|
|
DESTROYED # vm only
|
|
FAILED
|
|
INCOMPLETE # vm only
|
|
UNKNOWN
|
|
}
|
|
|
|
enum HealthyStatus {
|
|
HEALTHY
|
|
UNHEALTHY
|
|
MAINTENANCE
|
|
UNKNOWN
|
|
UNAVAILABLE
|
|
}
|
|
|
|
type Metric {
|
|
time: String!
|
|
value: Float!
|
|
}
|
|
|
|
enum MetricName {
|
|
AVG_MEM_BYTES
|
|
AVG_LOAD_PERCENT
|
|
AGG_NETWORK_BYTES
|
|
}
|
|
|
|
type InstanceMetric {
|
|
instance: String!
|
|
name: MetricName!
|
|
start: String!
|
|
end: String!
|
|
metrics: [Metric]
|
|
}
|
|
|
|
type Instance {
|
|
id: ID!
|
|
name: String!
|
|
machineId: ID!
|
|
primaryIp: String
|
|
status: InstanceStatus
|
|
healthy: HealthyStatus
|
|
watches: [String]
|
|
jobs: [String]
|
|
metrics(names: [MetricName]!, start: String!, end: String!): [InstanceMetric]!
|
|
}
|
|
|
|
type Datacenter {
|
|
id: ID!
|
|
name: String!
|
|
region: String!
|
|
}
|
|
|
|
# we probably wont use some of these queries or arguments
|
|
# but this way we expose the entire db through gql
|
|
type Query {
|
|
portal: Portal
|
|
user: User
|
|
deploymentGroups(name: String, slug: String): [DeploymentGroup]
|
|
deploymentGroup(id: ID, name: String, slug: String): DeploymentGroup
|
|
serviceScales(serviceName: String, versionId: ID): [ServiceScale]
|
|
serviceScale(id: ID!): ServiceScale
|
|
convergenceActions(
|
|
type: ConvergenceActionType
|
|
service: String
|
|
versionId: ID
|
|
): [ConvergenceAction]
|
|
convergenceAction(id: ID!): ConvergenceAction
|
|
versions(manifestId: ID, deploymentGroupId: ID): [Version]
|
|
version(id: ID, manifestId: ID): Version
|
|
manifests(type: String, deploymentGroupId: ID): [Manifest]
|
|
manifest(id: ID!): Manifest
|
|
services(
|
|
name: String
|
|
slug: String
|
|
parentId: ID
|
|
deploymentGroupId: ID
|
|
deploymentGroupSlug: String
|
|
): [Service]
|
|
service(id: ID, hash: ID): Service
|
|
packages(
|
|
name: String
|
|
type: String
|
|
memory: Int
|
|
disk: Int
|
|
swap: Int
|
|
lwps: Int
|
|
vcpus: Int
|
|
version: String
|
|
group: String
|
|
): [Package]
|
|
package(id: ID!): Package
|
|
instances(
|
|
name: String
|
|
machineId: ID
|
|
status: InstanceStatus
|
|
serviceId: ID
|
|
serviceSlug: String
|
|
deploymentGroupId: ID
|
|
deploymentGroupSlug: String
|
|
): [Instance]
|
|
instance(id: ID!): Instance
|
|
datacenter(id: ID, region: String): Datacenter
|
|
datacenters: [Datacenter]
|
|
config(
|
|
deploymentGroupName: String!
|
|
type: ManifestType!
|
|
format: ManifestFormat!
|
|
environment: String!
|
|
files: [KeyValueInput]!
|
|
raw: String!
|
|
): [Service]
|
|
importableDeploymentGroups: [DeploymentGroup]
|
|
# start and end should be .toISOString() date strings
|
|
metrics(
|
|
deploymentGroupId: ID!
|
|
names: [MetricName]!
|
|
instances: [ID]!
|
|
start: String!
|
|
end: String!
|
|
): [InstanceMetric]
|
|
}
|
|
|
|
type Mutation {
|
|
createDeploymentGroup(name: String!): DeploymentGroup
|
|
updateDeploymentGroup(id: ID!, name: String!): DeploymentGroup
|
|
deleteDeploymentGroup(id: ID!): DeploymentGroup
|
|
provisionManifest(
|
|
deploymentGroupId: ID!
|
|
type: ManifestType!
|
|
format: ManifestFormat!
|
|
environment: String!
|
|
files: [KeyValueInput]!
|
|
raw: String!
|
|
): Version
|
|
scale(serviceId: ID!, replicas: Int!): Version
|
|
stopServices(ids: [ID]!): [Service]
|
|
startServices(ids: [ID]!): [Service]
|
|
restartServices(ids: [ID]!): [Service]
|
|
deleteServices(ids: [ID]!): [Service]
|
|
stopInstances(ids: [ID]!): [Instance]
|
|
startInstances(ids: [ID]!): [Instance]
|
|
restartInstances(ids: [ID]!): [Instance]
|
|
importDeploymentGroup(deploymentGroupSlug: String!): DeploymentGroup
|
|
deleteDeploymentGroup(id: ID!): DeploymentGroup
|
|
}
|