You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: rule.go
    path of file: ./repos/grafana/pkg/services/ngalert/state/historian/model
    
    the code of the file until where you have to start completion: package model

import (
	"context"
	"strconv"

	"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
	"github.com/grafana/grafana/pkg/infra/log"
	"github.com/grafana/grafana/pkg/services/ngalert/models"
)

// RuleMeta is the metadata about a rule that is needed by state history.
type RuleMeta struct {
	ID           int64
	OrgID        int64
	UID          string
	Title        string
	Group        string
	NamespaceUID string
	DashboardUID string
	PanelID      int64
	Condition    string
}

func NewRuleMeta(r *models.AlertRule, log log.Logger) RuleMeta {
	dashUID, ok := r.Annotations[models.Das
    
func NewRuleMeta(r *models.AlertRule, log log.Logger) RuleMeta {
	dashUID, ok := r.Annotations[models.DashboardUIDAnnotation]
	var panelID int64
	if ok {
		panelAnno := r.Annotations[models.PanelIDAnnotation]
		pid, err := strconv.ParseInt(panelAnno, 10, 64)
		if err != nil {
			logger.Error("Error parsing panelUID for alert annotation", "ruleID", r.ID, "dash", dashUID, "actual", panelAnno, "error", err)
			pid = 0
			dashUID = ""
		}
		panelID = pid
	}
	return RuleMeta{
		ID:           r.ID,
		OrgID:        r.OrgID,
		UID:          r.UID,
		Title:        r.Title,
		Group:        r.RuleGroup,
		NamespaceUID: r.NamespaceUID,
		DashboardUID: dashUID,
		PanelID:      panelID,
		Condition:    r.Condition,
	}
}