1package graphql 2 3import ( 4 "strconv" 5 6 v2 "github.com/sensu/sensu-go/api/core/v2" 7 "github.com/sensu/sensu-go/backend/apid/graphql/suggest" 8) 9 10var ( 11 SuggestSchema = DefaultSuggestSchema() 12) 13 14type Subscribable interface { 15 GetSubscriptions() []string 16} 17 18type Commandable interface { 19 GetCommand() string 20} 21 22type Timeoutable interface { 23 GetTimeout() uint32 24} 25 26func subscriptionsFn(res v2.Resource) []string { 27 return res.(Subscribable).GetSubscriptions() 28} 29 30func commandFn(res v2.Resource) []string { 31 return []string{res.(Commandable).GetCommand()} 32} 33 34func timeoutFn(res v2.Resource) []string { 35 t := res.(Timeoutable).GetTimeout() 36 return []string{strconv.FormatUint(uint64(t), 10)} 37} 38 39func DefaultSuggestSchema() suggest.Register { 40 return suggest.Register{ 41 &suggest.Resource{ 42 Group: "core/v2", 43 Name: "asset", 44 Path: "/api/core/v2/namespaces/{namespace}/assets", 45 Fields: []suggest.Field{ 46 &suggest.ObjectField{ 47 Name: "metadata", 48 Fields: []suggest.Field{ 49 suggest.NameField, 50 suggest.LabelsField, 51 }, 52 }, 53 &suggest.CustomField{ 54 Name: "filters", 55 FieldFunc: func(res v2.Resource) []string { 56 return res.(*v2.Asset).Filters 57 }, 58 }, 59 }, 60 }, 61 &suggest.Resource{ 62 Group: "core/v2", 63 Name: "check_config", 64 Path: "/api/core/v2/namespaces/{namespace}/checks", 65 Fields: []suggest.Field{ 66 &suggest.ObjectField{ 67 Name: "metadata", 68 Fields: []suggest.Field{ 69 suggest.NameField, 70 suggest.LabelsField, 71 }, 72 }, 73 &suggest.CustomField{ 74 Name: "proxy_entity_name", 75 FieldFunc: func(res v2.Resource) []string { 76 return []string{res.(*v2.CheckConfig).ProxyEntityName} 77 }, 78 }, 79 &suggest.CustomField{ 80 Name: "command", 81 FieldFunc: commandFn, 82 }, 83 &suggest.CustomField{ 84 Name: "subscriptions", 85 FieldFunc: subscriptionsFn, 86 }, 87 &suggest.CustomField{ 88 Name: "timeout", 89 FieldFunc: timeoutFn, 90 }, 91 }, 92 }, 93 &suggest.Resource{ 94 Group: "core/v2", 95 Name: "entity", 96 Path: "/api/core/v2/namespaces/{namespace}/entities", 97 Fields: []suggest.Field{ 98 &suggest.ObjectField{ 99 Name: "metadata", 100 Fields: []suggest.Field{ 101 suggest.NameField, 102 suggest.LabelsField, 103 }, 104 }, 105 &suggest.ObjectField{ 106 Name: "system", 107 Fields: []suggest.Field{ 108 &suggest.CustomField{ 109 Name: "os", 110 FieldFunc: func(res v2.Resource) []string { 111 return []string{res.(*v2.Entity).System.OS} 112 }, 113 }, 114 &suggest.CustomField{ 115 Name: "platform", 116 FieldFunc: func(res v2.Resource) []string { 117 return []string{res.(*v2.Entity).System.Platform} 118 }, 119 }, 120 &suggest.CustomField{ 121 Name: "platform_family", 122 FieldFunc: func(res v2.Resource) []string { 123 return []string{res.(*v2.Entity).System.PlatformFamily} 124 }, 125 }, 126 &suggest.CustomField{ 127 Name: "arch", 128 FieldFunc: func(res v2.Resource) []string { 129 return []string{res.(*v2.Entity).System.Arch} 130 }, 131 }, 132 }, 133 }, 134 &suggest.CustomField{ 135 Name: "subscriptions", 136 FieldFunc: subscriptionsFn, 137 }, 138 &suggest.CustomField{ 139 Name: "user", 140 FieldFunc: func(res v2.Resource) []string { 141 return []string{res.(*v2.Entity).User} 142 }, 143 }, 144 }, 145 }, 146 &suggest.Resource{ 147 Group: "core/v2", 148 Name: "filter", 149 Path: "/api/core/v2/namespaces/{namespace}/filters", 150 Fields: []suggest.Field{ 151 &suggest.ObjectField{ 152 Name: "metadata", 153 Fields: []suggest.Field{ 154 suggest.NameField, 155 suggest.LabelsField, 156 }, 157 }, 158 }, 159 }, 160 &suggest.Resource{ 161 Group: "core/v2", 162 Name: "handler", 163 Path: "/api/core/v2/namespaces/{namespace}/handlers", 164 Fields: []suggest.Field{ 165 &suggest.ObjectField{ 166 Name: "metadata", 167 Fields: []suggest.Field{ 168 suggest.NameField, 169 suggest.LabelsField, 170 }, 171 }, 172 &suggest.CustomField{ 173 Name: "command", 174 FieldFunc: commandFn, 175 }, 176 &suggest.CustomField{ 177 Name: "timeout", 178 FieldFunc: timeoutFn, 179 }, 180 }, 181 }, 182 &suggest.Resource{ 183 Group: "core/v2", 184 Name: "hook_config", 185 Path: "/api/core/v2/namespaces/{namespace}/hooks", 186 Fields: []suggest.Field{ 187 &suggest.ObjectField{ 188 Name: "metadata", 189 Fields: []suggest.Field{ 190 suggest.NameField, 191 suggest.LabelsField, 192 }, 193 }, 194 &suggest.CustomField{ 195 Name: "command", 196 FieldFunc: commandFn, 197 }, 198 &suggest.CustomField{ 199 Name: "timeout", 200 FieldFunc: timeoutFn, 201 }, 202 }, 203 }, 204 &suggest.Resource{ 205 Group: "core/v2", 206 Name: "mutator", 207 Path: "/api/core/v2/namespaces/{namespace}/mutators", 208 Fields: []suggest.Field{ 209 &suggest.ObjectField{ 210 Name: "metadata", 211 Fields: []suggest.Field{ 212 suggest.NameField, 213 suggest.LabelsField, 214 }, 215 }, 216 &suggest.CustomField{ 217 Name: "command", 218 FieldFunc: commandFn, 219 }, 220 &suggest.CustomField{ 221 Name: "timeout", 222 FieldFunc: timeoutFn, 223 }, 224 }, 225 }, 226 &suggest.Resource{ 227 Group: "core/v2", 228 Name: "silenced", 229 Path: "/api/core/v2/namespaces/{namespace}/silenced", 230 Fields: []suggest.Field{ 231 &suggest.ObjectField{ 232 Name: "metadata", 233 Fields: []suggest.Field{ 234 suggest.NameField, 235 suggest.LabelsField, 236 }, 237 }, 238 &suggest.CustomField{ 239 Name: "check", 240 FieldFunc: func(res v2.Resource) []string { 241 return []string{res.(*v2.Silenced).Check} 242 }, 243 }, 244 &suggest.CustomField{ 245 Name: "subscription", 246 FieldFunc: func(res v2.Resource) []string { 247 return []string{res.(*v2.Silenced).Subscription} 248 }, 249 }, 250 &suggest.CustomField{ 251 Name: "creator", 252 FieldFunc: func(res v2.Resource) []string { 253 return []string{res.(*v2.Silenced).Creator} 254 }, 255 }, 256 }, 257 }, 258 &suggest.Resource{ 259 Group: "core/v2", 260 Name: "user", 261 Path: "/api/core/v2/users", 262 Fields: []suggest.Field{ 263 &suggest.CustomField{ 264 Name: "username", 265 FieldFunc: func(res v2.Resource) []string { 266 return []string{res.(*v2.User).Username} 267 }, 268 }, 269 &suggest.CustomField{ 270 Name: "groups", 271 FieldFunc: func(res v2.Resource) []string { 272 return res.(*v2.User).Groups 273 }, 274 }, 275 }, 276 }, 277 } 278} 279