{
    "title": "Controller",
    "$schema": "http://json-schema.org/draft-04/schema#",
    "javaType": "com.sos.joc.model.controller.Controller",
    "type": "object",
    "required": [
        "id",
        "controllerId",
        "title",
        "url",
        "role",
        "isCoupled"
    ],
    "properties": {
        "id": {
            "type": "number",
            "format": "utc-millisec",
            "minimum": 0
        },
        "surveyDate": {
            "description": "Value is UTC timestamp in ISO 8601 YYYY-MM-DDThh:mm:ss.sZ or empty",
            "type": "string",
            "format": "date-time"
        },
        "controllerId": {
            "type": "string",
            "pattern": "^[^/\\<>?:\"|*]*$",
            "maxLength": 100
        },
        "title": {
            "type": "string"
        },
        "host": {
            "type": "string"
        },
        "url": {
            "type": "string"
        },
        "clusterUrl": {
            "type": "string"
        },
        "role": {
            "javaType": "com.sos.joc.model.controller.Role",
            "type": "string",
            "enum": [
                "STANDALONE",
                "PRIMARY",
                "BACKUP"
            ]
        },
        "isCoupled": {
            "type": "boolean",
            "default": false
        },
        "startedAt": {
            "description": "Value is UTC timestamp in ISO 8601 YYYY-MM-DDThh:mm:ss.sZ or empty",
            "type": "string",
            "format": "date-time"
        },
        "version": {
            "type": "string"
        },
        "os": {
            "javaType": "com.sos.joc.model.controller.OperatingSystem",
            "type": "object",
            "required": [
                "name",
                "architecture",
                "distribution"
            ],
            "properties": {
                "name": {
                    "description": "Windows, Linux, AIX, Solaris, other",
                    "type": "string"
                },
                "architecture": {
                    "type": "string"
                },
                "distribution": {
                    "description": "e.g. Windows 2012, CentOS Linux release 7.2.1511 (Core)",
                    "type": "string"
                }
            }
        },
        "securityLevel": {
            "javaType": "com.sos.joc.model.common.JocSecurityLevel",
            "type": "string",
            "enum": [
                "LOW",
                "MEDIUM",
                "HIGH"
            ]
        },
        "componentState": {
            "javaType": "com.sos.joc.model.controller.ComponentState",
            "type": "object",
            "required": [
                "severity",
                "_text"
            ],
            "properties": {
                "severity": {
                    "description": "0=operational, 1=limited, 2=inoperable, 3=unknown",
                    "type": "integer"
                },
                "_text": {
                    "javaType": "com.sos.joc.model.controller.ComponentStateText",
                    "type": "string",
                    "enum": [
                        "operational",
                        "limited",
                        "inoperable",
                        "unknown"
                    ],
                    "javaEnumNames": [
                        "operational",
                        "limited",
                        "inoperable",
                        "unknown"
                    ]
                }
            }
        },
        "connectionState": {
            "javaType": "com.sos.joc.model.controller.ConnectionState",
            "type": "object",
            "required": [
                "severity",
                "_text"
            ],
            "properties": {
                "severity": {
                    "description": "0=established, 1=unstable, 2=unreachable, 3=unknown",
                    "type": "integer"
                },
                "_text": {
                    "javaType": "com.sos.joc.model.controller.ConnectionStateText",
                    "type": "string",
                    "enum": [
                        "established",
                        "unstable",
                        "unreachable",
                        "unknown"
                    ],
                    "javaEnumNames": [
                        "established",
                        "unstable",
                        "unreachable",
                        "unknown"
                    ]
                }
            }
        },
        "clusterNodeState": {
            "javaType": "com.sos.joc.model.controller.ClusterNodeState",
            "type": "object",
            "required": [
                "severity",
                "_text"
            ],
            "properties": {
                "severity": {
                    "description": "0=active, 1=inactive, 3=unknown",
                    "type": "integer"
                },
                "_text": {
                    "javaType": "com.sos.joc.model.controller.ClusterNodeStateText",
                    "type": "string",
                    "enum": [
                        "active",
                        "inactive",
                        "unknown"
                    ],
                    "javaEnumNames": [
                        "active",
                        "inactive",
                        "unknown"
                    ]
                }
            }
        }
    }
}