# opslevel-go **Repository Path**: mirrors_eapache/opslevel-go ## Basic Information - **Project Name**: opslevel-go - **Description**: A Go client for interacting with OpsLevel - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-01-13 - **Last Updated**: 2026-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

opslevel-go =========== Package `opslevel` provides an OpsLevel API client implementation. *NOTE: this library is still a WIP and does not match the API 100% yet* # Installation `opslevel` requires Go version 1.8 or later. ```bash go get -u github.com/opslevel/opslevel-go ``` # Usage Construct a client, specifying the [API token](https://app.opslevel.com/api_tokens). Then, you can use it to make GraphQL queries and mutations. ```Go client := opslevel.NewClient("XXX_API_TOKEN_XXX") // Use client... ``` You can validate the client can successfully talk to the OpsLevel API. ```go client := opslevel.NewClient("XXX_API_TOKEN_XXX") if err := client.Validate() { panic(err) } ``` Every resource (IE: service, lifecycle, tier, etc) in OpsLevel API has a corresponding data structure in go as well as the graphql query & mutation inputs. Additionally there is also some helper functions that use native go types like `string` and `[]string` to make it easier to work with. The following are a handful of examples: Find a service given an alias and print the owning team name: ```go foundService, foundServiceErr := client.GetServiceWithAlias("MyCoolService") if foundServiceErr != nil { panic(foundServiceErr) } fmt.Println(foundService.Owner.Name) ``` Create a new service in OpsLevel and print the ID: ```go serviceCreateInput := opslevel.ServiceCreateInput{ Name: "MyCoolService", Product: "MyProduct", Description: "The Coolest Service", Language: "go", } newService, newServiceErr := client.CreateService(serviceCreateInput) if newServiceErr != nil { panic(newServiceErr) } fmt.Println(newService.Id) ``` Assign the tag `{"hello": "world"}` to our newly created service and print all the tags currently on it: ```go allTagsOnThisService, err := client.AssignTagForId(newService.Id, "Hello", "World") for tagKey, tagValue := range allTagsOnThisService { fmt.Printf("Tag '{%s : %s}'", tagKey, tagValue) } ``` List all the tags for a service: ```go tags, tagsErr := client.GetTagsForServiceWithAlias("MyCoolService") for _, tag := range tags { fmt.Printf("Tag '{%s : %s}'\n", tag.Key, tag.Value) } // OR service, serviceErr := client.GetServiceWithAlias("MyCoolService") tags, tagsErr := client.GetTagsForService(service.Id) for _, tag := range tags { fmt.Printf("Tag '{%s : %s}'\n", tag.Key, tag.Value) } ``` Build a lookup table of teams: ```go func GetTeams(client *opslevel.Client) (map[string]opslevel.Team, error) { teams := make(map[string]opslevel.Team) data, dataErr := client.ListTeams() if dataErr != nil { return teams, dataErr } for _, team := range data { teams[string(team.Alias)] = team } return teams, nil } ``` # Advanced Usage The client also exposes functions `Query` and `Mutate` for doing custom query or mutations. We are running ontop of this [go graphql library](https://github.com/shurcooL/graphql) so you can read up on how to define go structures that represent a query or mutation there but here is an example of each: ### Query ```go var query struct { Account struct { Tiers []Tier } } if err := client.Query(&query, nil); err != nil { panic(err) } for _, tier := range m.Account.Tiers { fmt.Println(tier.Name) } ``` ### Mutation ```go var mutation struct { Payload struct { Aliases []graphql.String OwnerId graphql.String Errors []opslevel.OpsLevelErrors } `graphql:"aliasCreate(input: $input)"` } variables := PayloadVariables{ "input": opslevel.AliasCreateInput{ Alias: "MyNewAlias", OwnerId: "XXXXXXXXXXX", }, } if err := client.Mutate(&mutation, variables); err != nil { panic(err) } for _, alias := range m.Payload.Aliases { fmt.Println(alias) } ```