Skip to content

Instantly share code, notes, and snippets.

@jamesmontalvo3
Created August 16, 2022 20:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jamesmontalvo3/6ace53af2d079c6cf3a7f4a2a0299ffd to your computer and use it in GitHub Desktop.
Save jamesmontalvo3/6ace53af2d079c6cf3a7f4a2a0299ffd to your computer and use it in GitHub Desktop.
{
"version": {
"name": "mdJson",
"version": "1.0.0"
},
"contact": [
{
"contactId": "1",
"organizationName": "US Geological Survey - Alaska Science Center"
}
],
"metadata": {
"resourceInfo": {
"resourceType": "project",
"citation": {
"title": "Real-Time Permafrost and Climate Monitoring Network - Arctic Alaska",
"date": [
{
"date": "2012-12-21",
"dateType": "revision"
}
]
},
"pointOfContact": [
{
"contactId": "1",
"role": "pointOfContact"
}
],
"abstract": "DOI is developing a long-term permafrost monitoring network.",
"status": "onGoing",
"language": [
"eng; USA",
"esp; MEX"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"IDurationField": {
"description": "Specify the duration of a period",
"properties": {
"hours": {
"description": "Hours in duration",
"type": [
"string",
"number"
]
},
"minutes": {
"description": "Minutes in duration",
"type": [
"string",
"number"
]
},
"seconds": {
"description": "Seconds in duration",
"type": [
"string",
"number"
]
}
},
"type": "object"
},
"IOffsetableDurationField": {
"description": "Duration field with the ability to be offset by another duration",
"properties": {
"hours": {
"description": "Hours in duration",
"type": [
"string",
"number"
]
},
"minutes": {
"description": "Minutes in duration",
"type": [
"string",
"number"
]
},
"offset": {
"$ref": "#/definitions/IDurationField",
"description": "Specify a duration by which to offset the duration"
},
"seconds": {
"description": "Seconds in duration",
"type": [
"string",
"number"
]
}
},
"type": "object"
},
"UserComments": {
"description": "Anything that takes comments should allow",
"type": "object"
}
},
"description": "Grouping of Locations and Traverses, creating an \"itinerary\" aka EVA aka Procedure aka Timeline.\nCalling it \"Itinerary\" here just to deconflict terminology for now while we figure out what we're\nbuilding, so as not to confuse with \"Maestro Procedures/Timelines\" and the generic concept of EVA",
"properties": {
"name": {
"type": "string"
},
"owner": {
"type": "string"
},
"sites": {
"description": "Should be [Location,Traverse,Location,Traverse], never [Location,Location,Traverse]. Also\nshould support point-to-point (first and last location not the same) and circuit.",
"items": {
"anyOf": [
{
"description": "Activity Prototype Entity: The shape of a activity prototype in Redux store",
"properties": {
"file": {
"description": "Path of the activity YAML file relative to the Maestro project's `./activities` directory.\nFor a file directly in the `./activities` directory, this will just be the file name itself.\nIf the file is in a sub-directory then that directory is included.",
"examples": [
"Egress_!_Setup.yml",
"MAINT_5/Egress_!_Setup.yml"
],
"type": "string"
},
"roles": {
"description": "Info regarding roles required for this activity",
"items": {
"properties": {
"description": {
"description": "Brief explanation of what a role does on an activity",
"type": "string"
},
"duration": {
"$ref": "#/definitions/IOffsetableDurationField",
"description": "Duration, including any offset (starting early or late), for a role on an activity"
},
"name": {
"description": "Role name",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"syncBlocks": {
"description": "Array of Sync Block UUIDs, pointing to Redux store at state.syncBlocks.entities[uuid]",
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"description": "Title of the activity",
"examples": [
"Egress & Setup",
"Failed FHRC Removal"
],
"type": "string"
},
"uuid": {
"description": "UUID for the activity prototype. Corresponds to IActivityPrototypeDefinition.prototypeUuid.\nIs named `uuid` here to match Maestro's Redux conventions.",
"type": "string"
},
"path": {
"description": "Should this be `Point[]` (just basic points) or `DrawingNote[]` to encourage annotations and\nat the points? Could even make it `(DrawingNote | DrawingAction)[]` to allow actions to be\nperformed at the points, e.g. \"At the crest of the hill, take a panorama\".",
"items": {
"description": "Basic concept of a point",
"properties": {
"elevation": {
"type": "number"
},
"lat": {
"type": "number"
},
"long": {
"type": "number"
}
},
"type": "object"
},
"type": "array"
},
"type": {
"description": "type guard to differentiate from GeologyStation and standard Maestro activities",
"enum": [
"PlanetaryTraverse"
],
"type": "string"
}
},
"type": "object"
},
{
"description": "Activity Prototype Entity: The shape of a activity prototype in Redux store",
"properties": {
"file": {
"description": "Path of the activity YAML file relative to the Maestro project's `./activities` directory.\nFor a file directly in the `./activities` directory, this will just be the file name itself.\nIf the file is in a sub-directory then that directory is included.",
"examples": [
"Egress_!_Setup.yml",
"MAINT_5/Egress_!_Setup.yml"
],
"type": "string"
},
"roles": {
"description": "Info regarding roles required for this activity",
"items": {
"properties": {
"description": {
"description": "Brief explanation of what a role does on an activity",
"type": "string"
},
"duration": {
"$ref": "#/definitions/IOffsetableDurationField",
"description": "Duration, including any offset (starting early or late), for a role on an activity"
},
"name": {
"description": "Role name",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"syncBlocks": {
"description": "Array of Sync Block UUIDs, pointing to Redux store at state.syncBlocks.entities[uuid]",
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"description": "Title of the activity",
"examples": [
"Egress & Setup",
"Failed FHRC Removal"
],
"type": "string"
},
"uuid": {
"description": "UUID for the activity prototype. Corresponds to IActivityPrototypeDefinition.prototypeUuid.\nIs named `uuid` here to match Maestro's Redux conventions.",
"type": "string"
},
"actions": {
"description": "Actions to perform at the station",
"items": {
"allOf": [
{
"description": "All drawing features should include location, categorization, labeling, and notes. The different\nfeature types (DrawingHazard, DrawingNote, DrawingAction, etc) will add on more info.\n\nDrawingFeature should not be used directly (it's abstract). Instead use one of the types that\nextends it. Every extending type must have a `featureType` property as a type guard.",
"properties": {
"categories": {
"items": {
"type": "string"
},
"type": "array"
},
"label": {
"type": "string"
},
"location": {
"anyOf": [
{
"description": "Basic concept of a point",
"properties": {
"elevation": {
"type": "number"
},
"lat": {
"type": "number"
},
"long": {
"type": "number"
}
},
"type": "object"
},
{
"items": {
"description": "Basic concept of a point",
"properties": {
"elevation": {
"type": "number"
},
"lat": {
"type": "number"
},
"long": {
"type": "number"
}
},
"type": "object"
},
"type": "array"
}
]
},
"notes": {
"$ref": "#/definitions/UserComments"
},
"showLabel": {
"type": "boolean"
}
},
"type": "object"
},
{
"properties": {
"color": {
"type": "string"
},
"featureType": {
"enum": [
"Action"
],
"type": "string"
},
"importance": {
"type": "number"
},
"measurement": {
"properties": {
"color": {
"type": "string"
},
"notes": {
"type": "string"
},
"shape": {
"type": "string"
},
"size": {
"type": "number"
}
},
"type": "object"
},
"observation": {
"properties": {
"notes": {
"type": "string"
}
},
"type": "object"
},
"sample": {
"properties": {
"notes": {
"type": "string"
}
},
"type": "object"
},
"stm": {
"items": {
"description": "Science Traceability Matrix (STM) shaped like:\n\n1. Mission A (e.g. Artemis 3)\n 1. Objective 1\n a. Goal A\n 1. Investigation 1\n 2. Investigation 2\n b. Goal B\n c. Goal C\n 2. Objective 2\n2. Mission B\n 1. ...",
"properties": {
"label": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
],
"description": "Action to be taken by crew on the surface (photograph, describe, take sample, etc)"
},
"type": "array"
},
"area": {
"description": "Set of points defining polygon of the station",
"items": {
"description": "Basic concept of a point",
"properties": {
"elevation": {
"type": "number"
},
"lat": {
"type": "number"
},
"long": {
"type": "number"
}
},
"type": "object"
},
"type": "array"
},
"centroid": {
"description": "Point to be used to traverse to/from",
"properties": {
"elevation": {
"type": "number"
},
"lat": {
"type": "number"
},
"long": {
"type": "number"
}
},
"type": "object"
},
"type": {
"description": "type guard to differentiate from PlanetaryTraverse and standard Maestro activities",
"enum": [
"GeologyStation"
],
"type": "string"
},
"walkback": {
"description": "define an array of traverses to take to walk back. This may be the set of traverses going\nforward/backward on the planned route, or it may be new traverses cutting straight back to\nthe lander.",
"items": {
"allOf": [
{
"description": "Activity Prototype Entity: The shape of a activity prototype in Redux store",
"properties": {
"file": {
"description": "Path of the activity YAML file relative to the Maestro project's `./activities` directory.\nFor a file directly in the `./activities` directory, this will just be the file name itself.\nIf the file is in a sub-directory then that directory is included.",
"examples": [
"Egress_!_Setup.yml",
"MAINT_5/Egress_!_Setup.yml"
],
"type": "string"
},
"roles": {
"description": "Info regarding roles required for this activity",
"items": {
"properties": {
"description": {
"description": "Brief explanation of what a role does on an activity",
"type": "string"
},
"duration": {
"$ref": "#/definitions/IOffsetableDurationField",
"description": "Duration, including any offset (starting early or late), for a role on an activity"
},
"name": {
"description": "Role name",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"syncBlocks": {
"description": "Array of Sync Block UUIDs, pointing to Redux store at state.syncBlocks.entities[uuid]",
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"description": "Title of the activity",
"examples": [
"Egress & Setup",
"Failed FHRC Removal"
],
"type": "string"
},
"uuid": {
"description": "UUID for the activity prototype. Corresponds to IActivityPrototypeDefinition.prototypeUuid.\nIs named `uuid` here to match Maestro's Redux conventions.",
"type": "string"
}
},
"type": "object"
},
{
"properties": {
"path": {
"description": "Should this be `Point[]` (just basic points) or `DrawingNote[]` to encourage annotations and\nat the points? Could even make it `(DrawingNote | DrawingAction)[]` to allow actions to be\nperformed at the points, e.g. \"At the crest of the hill, take a panorama\".",
"items": {
"description": "Basic concept of a point",
"properties": {
"elevation": {
"type": "number"
},
"lat": {
"type": "number"
},
"long": {
"type": "number"
}
},
"type": "object"
},
"type": "array"
},
"type": {
"description": "type guard to differentiate from GeologyStation and standard Maestro activities",
"enum": [
"PlanetaryTraverse"
],
"type": "string"
}
},
"type": "object"
}
]
},
"type": "array"
}
},
"type": "object"
}
]
},
"type": "array"
}
},
"type": "object"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment