@@ -164,7 +164,7 @@ const (
164164
165165// DataSource represents a Grafana data source
166166type DataSource struct {
167- ID int64 `json:"id"`
167+ ID uint32 `json:"id"`
168168 UID string `json:"uid"`
169169 Name string `json:"name"`
170170
@@ -199,3 +199,59 @@ func (ds *DataSource) Valid() error {
199199
200200 return nil
201201}
202+
203+ // DashBoard represents a Grafana dashboard
204+ type DashBoard struct {
205+ DashBoardMeta `json:"meta"`
206+ DashBoardInfo `json:"dashboard"`
207+ }
208+
209+ type DashBoardMeta struct {
210+ Slug string `json:"slug"`
211+ URL string `json:"url"`
212+ Provisioned bool `json:"provisioned"`
213+ }
214+
215+ type DashBoardInfo struct {
216+ UID string `json:"uid"`
217+ Title string `json:"title"`
218+ Annotations map [string ]interface {} `json:"annotations"`
219+ Panels []Panel `json:"panels"`
220+ }
221+
222+ // Panel represents a Grafana panel.
223+ // A panel can be used either for displaying data or separating groups
224+ type Panel struct {
225+ ID uint32 `json:"id"`
226+ Title string `json:"title"`
227+ Type string `json:"type"`
228+ Targets []PanelQuery `json:"targets"`
229+ Panels []Panel `json:"panels"`
230+ }
231+
232+ type PanelQuery struct {
233+ RawQuery bool `json:"rawQuery"`
234+ RefID string `json:"refId"`
235+ Target string `json:"target"`
236+ Type string `json:"table"`
237+ }
238+
239+ func (db * DashBoard ) Valid () error {
240+ if db .UID != GRAFANA_DASHBOARD_UID {
241+ return fmt .Errorf ("expected dashboard uid %s, but got %s" , GRAFANA_DASHBOARD_UID , db .UID )
242+ }
243+
244+ if db .Title != GRAFANA_DASHBOARD_TITLE {
245+ return fmt .Errorf ("expected dashboard title %s, but got %s" , GRAFANA_DASHBOARD_TITLE , db .Title )
246+ }
247+
248+ if ! db .Provisioned {
249+ return errors .New ("expected dashboard to be provisioned, but got unprovisioned" )
250+ }
251+
252+ if len (db .Panels ) == 0 {
253+ return errors .New ("expected dashboard to have panels, but got 0" )
254+ }
255+
256+ return nil
257+ }
0 commit comments