diff --git a/Makefile b/Makefile index f54a87fb2..acfbb3785 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ NAME="github.com/odpf/meteor" VERSION=$(shell git describe --always --tags 2>/dev/null) COVERFILE="/tmp/app.coverprofile" -PROTON_COMMIT := "7557d095f1535143684fdb13a2ba536d4723f560" +PROTON_COMMIT := "a3dd74d3f400f43719a647e61d56d0e2e3bc906f" .PHONY: all build clean test all: build @@ -38,4 +38,8 @@ generate-proto: ## regenerate protos @echo " > protobuf compilation finished" lint: ## Lint with golangci-lint - golangci-lint run \ No newline at end of file + golangci-lint run + +install: ## install required dependencies + @echo "> installing dependencies" + go install github.com/vektra/mockery/v2@v2.14.0 diff --git a/cmd/gen.go b/cmd/gen.go index d65c2fd20..64870b4cf 100644 --- a/cmd/gen.go +++ b/cmd/gen.go @@ -2,7 +2,7 @@ package cmd import ( "fmt" - "io/ioutil" + "os" "github.com/MakeNowJust/heredoc" "github.com/odpf/meteor/recipe" @@ -36,7 +36,7 @@ func GenCmd() *cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { templatePath := args[0] - bytes, err := ioutil.ReadFile(dataFilePath) + bytes, err := os.ReadFile(dataFilePath) if err != nil { return fmt.Errorf("error reading data: %w", err) } diff --git a/docs/docs/reference/extractors.md b/docs/docs/reference/extractors.md index 78e921a0b..7aee12c2d 100644 --- a/docs/docs/reference/extractors.md +++ b/docs/docs/reference/extractors.md @@ -6,55 +6,61 @@ Meteor currently supports metadata extraction on these data sources. To perform ### Table -| Type | Attributes | Profile | Schema | Lineage | Ownership | Custom | -|:-------------------------------------------------------------------------------------------------|:-----------|:--------|:-------|:--------|:----------|:-------| -| [`clickhouse`](https://github.com/odpf/meteor/tree/main/plugins/extractors/clickhouse/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`couchdb`](https://github.com/odpf/meteor/tree/main/plugins/extractors/couchdb/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`mongodb`](https://github.com/odpf/meteor/tree/main/plugins/extractors/mongodb/README.md) | ✅ | ✅ | ✗ | ✗ | ✗ | ✗ | -| [`mssql`](https://github.com/odpf/meteor/tree/main/plugins/extractors/mssql/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`mysql`](https://github.com/odpf/meteor/tree/main/plugins/extractors/mysql/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`postgres`](https://github.com/odpf/meteor/tree/main/plugins/extractors/postgres/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`cassandra`](https://github.com/odpf/meteor/tree/main/plugins/extractors/cassandra/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`oracle`](https://github.com/odpf/meteor/tree/main/plugins/extractors/oracle/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`mariadb`](https://github.com/odpf/meteor/tree/main/plugins/extractors/mariadb/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`redshift`](https://github.com/odpf/meteor/tree/main/plugins/extractors/redshift/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`presto`](https://github.com/odpf/meteor/tree/main/plugins/extractors/presto/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`snowflake`](https://github.com/odpf/meteor/tree/main/plugins/extractors/snowflake/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | +| Type | Attributes | Profile | Schema | Lineage | Ownership | Custom | +|:-----------------------------------------------------------------|:-----------|:--------|:-------|:--------|:----------|:-------| +| [`clickhouse`](../../../plugins/extractors/clickhouse/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`couchdb`](../../../plugins/extractors/couchdb/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`mongodb`](../../../plugins/extractors/mongodb/README.md) | ✅ | ✅ | ✗ | ✗ | ✗ | ✗ | +| [`mssql`](../../../plugins/extractors/mssql/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`mysql`](../../../plugins/extractors/mysql/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`postgres`](../../../plugins/extractors/postgres/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`cassandra`](../../../plugins/extractors/cassandra/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`oracle`](../../../plugins/extractors/oracle/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`mariadb`](../../../plugins/extractors/mariadb/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`redshift`](../../../plugins/extractors/redshift/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`presto`](../../../plugins/extractors/presto/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`snowflake`](../../../plugins/extractors/snowflake/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | ✗ | ### Dashboard -| Type | Url | Chart | Lineage | Tags | Custom | -|:---------------------------------------------------------------------------------------------|:----|:------|:--------|:-----|:-------| -| [`grafana`](https://github.com/odpf/meteor/tree/main/plugins/extractors/grafana/README.md) | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`metabase`](https://github.com/odpf/meteor/tree/main/plugins/extractors/metabase/README.md) | ✅ | ✅ | ✗ | ✗ | ✗ | -| [`superset`](https://github.com/odpf/meteor/tree/main/plugins/extractors/superset/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | -| [`tableau`](https://github.com/odpf/meteor/tree/main/plugins/extractors/tableau/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | -| [`redash`](https://github.com/odpf/meteor/tree/main/plugins/extractors/redash/README.md) | ✅ | ✗ | ✗ | ✗ | ✗ | +| Type | Url | Chart | Lineage | Tags | Custom | +|:-------------------------------------------------------------|:----|:------|:--------|:-----|:-------| +| [`grafana`](../../../plugins/extractors/grafana/README.md) | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`metabase`](../../../plugins/extractors/metabase/README.md) | ✅ | ✅ | ✗ | ✗ | ✗ | +| [`superset`](../../../plugins/extractors/superset/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | +| [`tableau`](../../../plugins/extractors/tableau/README.md) | ✅ | ✅ | ✅ | ✗ | ✗ | +| [`redash`](../../../plugins/extractors/redash/README.md) | ✅ | ✗ | ✗ | ✗ | ✗ | ### Topic -| Type | Profile | Schema | Ownership | Lineage | Tags | Custom | -|:---------------------------------------------------------------------------------------|:--------|:-------|:----------|:--------|:-----|:-------| -| [`kafka`](https://github.com/odpf/meteor/tree/main/plugins/extractors/kafka/README.md) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | +| Type | Profile | Schema | Ownership | Lineage | Tags | Custom | +|:-------------------------------------------------------|:--------|:-------|:----------|:--------|:-----|:-------| +| [`kafka`](../../../plugins/extractors/kafka/README.md) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ### User -| Type | Email | Username | FullName | Title | IsActive | ManagerEmail | Profiles | Memberships | facets | common | -|:-----------------------------------------------------------------------------------------|:------|:---------|:---------|:------|:---------|:-------------|:---------|:------------|:-------|:-------| -| [`github`](https://github.com/odpf/meteor/tree/main/plugins/extractors/github/README.md) | ✅ | ✅ | ✅ | ☐ | ✅ | ☐ | ☐ | ☐ | ☐ | ☐ | -| [`shield`](https://github.com/odpf/meteor/tree/main/plugins/extractors/shield/README.md) | ✅ | ✅ | ✅ | ☐ | ✅ | ☐ | ☐ | ✅ | ✅ | ☐ | -| [`gsuite`](https://github.com/odpf/meteor/tree/main/plugins/extractors/gsuite/README.md) | ✅ | ☐ | ✅ | ☐ | ✅ | ✅ | ☐ | ☐ | ☐ | ☐ | +| Type | Email | Username | FullName | Title | IsActive | ManagerEmail | Profiles | Memberships | facets | common | +|:---------------------------------------------------------|:------|:---------|:---------|:------|:---------|:-------------|:---------|:------------|:-------|:-------| +| [`github`](../../../plugins/extractors/github/README.md) | ✅ | ✅ | ✅ | ☐ | ✅ | ☐ | ☐ | ☐ | ☐ | ☐ | +| [`shield`](../../../plugins/extractors/shield/README.md) | ✅ | ✅ | ✅ | ☐ | ✅ | ☐ | ☐ | ✅ | ✅ | ☐ | +| [`gsuite`](../../../plugins/extractors/gsuite/README.md) | ✅ | ☐ | ✅ | ☐ | ✅ | ✅ | ☐ | ☐ | ☐ | ☐ | ### Bucket -| type | Location | StorageType | Blobs | Ownership | Tags | Custom | Timestamps | -|:-----------------------------------------------------------------------------------|:---------|:------------|:------|:----------|:-----|:-------|:-----------| -| [`gcs`](https://github.com/odpf/meteor/tree/main/plugins/extractors/gcs/README.md) | ✅ | ✅ | ✗ | ✅ | ✅ | ✗ | ✅ | +| type | Location | StorageType | Blobs | Ownership | Tags | Custom | Timestamps | +|:---------------------------------------------------|:---------|:------------|:------|:----------|:-----|:-------|:-----------| +| [`gcs`](../../../plugins/extractors/gcs/README.md) | ✅ | ✅ | ✗ | ✅ | ✅ | ✗ | ✅ | ### Job -| Type | Ownership | Upstreams | Downstreams | Custom | -|:-------------------------------------------------------------------------------------------|:----------|:----------|:------------|:-------| -| [`optimus`](https://github.com/odpf/meteor/tree/main/plugins/extractors/optimus/README.md) | ✅ | ✅ | ✅ | ✅ | ✅ | +| Type | Ownership | Upstreams | Downstreams | Custom | +|:-----------------------------------------------------------|:----------|:----------|:------------|:-------| +| [`optimus`](../../../plugins/extractors/optimus/README.md) | ✅ | ✅ | ✅ | ✅ | ✅ | + +### Machine Learning Feature Table + +| Type | Ownership | Upstreams | Downstreams | Custom | +|:-------------------------------------------------------------------|:----------|:----------|:------------|:-------| +| [`caramlstore`](../../../plugins/extractors/caramlstore/README.md) | ✗ | ✅ | ✗ | ✅ | diff --git a/models/odpf/assets/v1beta2/common.pb.go b/models/odpf/assets/v1beta2/common.pb.go index da5a79e61..592b370f6 100644 --- a/models/odpf/assets/v1beta2/common.pb.go +++ b/models/odpf/assets/v1beta2/common.pb.go @@ -93,7 +93,7 @@ func (x *Event) GetDescription() string { return "" } -// Linage reprsents the relationship of resource to other resources. +// Linage represents the relationship of resource to other resources. // Relation is way of describing the relationship between two resources. type Lineage struct { state protoimpl.MessageState diff --git a/models/odpf/assets/v1beta2/experiment.pb.go b/models/odpf/assets/v1beta2/experiment.pb.go new file mode 100644 index 000000000..dee0f653e --- /dev/null +++ b/models/odpf/assets/v1beta2/experiment.pb.go @@ -0,0 +1,355 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: odpf/assets/v1beta2/experiment.proto + +package assetsv1beta2 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// An experiment is the set of configurations and filters that allow for +// systematically varying some independent variables to impact some other +// dependent variables. +type Experiment struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional: Type of the entity being experimented over. ex: customer, session, + // device, driver etc. + Entity string `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + // Optional: Percentage of the traffic that the experiment is enabled for. + TrafficPercent float32 `protobuf:"fixed32,2,opt,name=traffic_percent,json=trafficPercent,proto3" json:"traffic_percent,omitempty"` + // The variants of the experiment possibly including the control group. + Variants []*Experiment_Variant `protobuf:"bytes,3,rep,name=variants,proto3" json:"variants,omitempty"` + // Optional: List of attributes the experiment has. This could include the + // following: + // - client_id[string]: The ID if the client running the experiment. + // - client_name[string]: The name of the client running the experiment. + // - primary_metric[string]: Used to determine a statistically significant + // winning or losing variant. + // - guardrail_metric[string]: Business metric designed to indirectly measure + // business value and track any potentially misleading or erroneous results + // and analysis. + // - variant_sample_size[double]: Sample size per variant. + // - filter_rules[repeated string]: Textual representation of rules required + // to be satisfied for experiment to be shown to the user. + // - start_time[RFC 3339 string]: The timestamp at which the + // experiment would start. + // - end_time[RFC 3339 string]: The timestamp at which the + // experiment would end. + Attributes *structpb.Struct `protobuf:"bytes,5,opt,name=attributes,proto3" json:"attributes,omitempty"` + // The timestamp of the experiment's creation. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,101,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The timestamp when the experiment was last modified. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,102,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` +} + +func (x *Experiment) Reset() { + *x = Experiment{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_assets_v1beta2_experiment_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Experiment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Experiment) ProtoMessage() {} + +func (x *Experiment) ProtoReflect() protoreflect.Message { + mi := &file_odpf_assets_v1beta2_experiment_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Experiment.ProtoReflect.Descriptor instead. +func (*Experiment) Descriptor() ([]byte, []int) { + return file_odpf_assets_v1beta2_experiment_proto_rawDescGZIP(), []int{0} +} + +func (x *Experiment) GetEntity() string { + if x != nil { + return x.Entity + } + return "" +} + +func (x *Experiment) GetTrafficPercent() float32 { + if x != nil { + return x.TrafficPercent + } + return 0 +} + +func (x *Experiment) GetVariants() []*Experiment_Variant { + if x != nil { + return x.Variants + } + return nil +} + +func (x *Experiment) GetAttributes() *structpb.Struct { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *Experiment) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *Experiment) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +// Instance of configurations to be compared in the experiment. +type Experiment_Variant struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of the experiment variant. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Traffic percent enabled for the variant. + TrafficPercent float32 `protobuf:"fixed32,2,opt,name=traffic_percent,json=trafficPercent,proto3" json:"traffic_percent,omitempty"` + // Indicated whether the variant is the control for the experiment. + IsControl bool `protobuf:"varint,3,opt,name=is_control,json=isControl,proto3" json:"is_control,omitempty"` + // List of properties the entity has. + Attributes *structpb.Struct `protobuf:"bytes,4,opt,name=attributes,proto3" json:"attributes,omitempty"` + // Whether the variant has been promoted to all users. + IsPromoted bool `protobuf:"varint,5,opt,name=is_promoted,json=isPromoted,proto3" json:"is_promoted,omitempty"` +} + +func (x *Experiment_Variant) Reset() { + *x = Experiment_Variant{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_assets_v1beta2_experiment_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Experiment_Variant) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Experiment_Variant) ProtoMessage() {} + +func (x *Experiment_Variant) ProtoReflect() protoreflect.Message { + mi := &file_odpf_assets_v1beta2_experiment_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Experiment_Variant.ProtoReflect.Descriptor instead. +func (*Experiment_Variant) Descriptor() ([]byte, []int) { + return file_odpf_assets_v1beta2_experiment_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *Experiment_Variant) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Experiment_Variant) GetTrafficPercent() float32 { + if x != nil { + return x.TrafficPercent + } + return 0 +} + +func (x *Experiment_Variant) GetIsControl() bool { + if x != nil { + return x.IsControl + } + return false +} + +func (x *Experiment_Variant) GetAttributes() *structpb.Struct { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *Experiment_Variant) GetIsPromoted() bool { + if x != nil { + return x.IsPromoted + } + return false +} + +var File_odpf_assets_v1beta2_experiment_proto protoreflect.FileDescriptor + +var file_odpf_assets_v1beta2_experiment_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x32, 0x2f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x87, 0x04, 0x0a, 0x0a, 0x45, + 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x66, + 0x66, 0x69, 0x63, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x08, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x32, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x12, + 0x37, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0a, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x1a, 0xbf, 0x01, 0x0a, 0x07, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x74, 0x72, 0x61, + 0x66, 0x66, 0x69, 0x63, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, + 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x37, 0x0a, 0x0a, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, + 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x50, 0x72, 0x6f, 0x6d, + 0x6f, 0x74, 0x65, 0x64, 0x42, 0x56, 0x0a, 0x0e, 0x69, 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x42, 0x0f, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, + 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x3b, 0x61, + 0x73, 0x73, 0x65, 0x74, 0x73, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_odpf_assets_v1beta2_experiment_proto_rawDescOnce sync.Once + file_odpf_assets_v1beta2_experiment_proto_rawDescData = file_odpf_assets_v1beta2_experiment_proto_rawDesc +) + +func file_odpf_assets_v1beta2_experiment_proto_rawDescGZIP() []byte { + file_odpf_assets_v1beta2_experiment_proto_rawDescOnce.Do(func() { + file_odpf_assets_v1beta2_experiment_proto_rawDescData = protoimpl.X.CompressGZIP(file_odpf_assets_v1beta2_experiment_proto_rawDescData) + }) + return file_odpf_assets_v1beta2_experiment_proto_rawDescData +} + +var file_odpf_assets_v1beta2_experiment_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_odpf_assets_v1beta2_experiment_proto_goTypes = []interface{}{ + (*Experiment)(nil), // 0: odpf.assets.v1beta2.Experiment + (*Experiment_Variant)(nil), // 1: odpf.assets.v1beta2.Experiment.Variant + (*structpb.Struct)(nil), // 2: google.protobuf.Struct + (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp +} +var file_odpf_assets_v1beta2_experiment_proto_depIdxs = []int32{ + 1, // 0: odpf.assets.v1beta2.Experiment.variants:type_name -> odpf.assets.v1beta2.Experiment.Variant + 2, // 1: odpf.assets.v1beta2.Experiment.attributes:type_name -> google.protobuf.Struct + 3, // 2: odpf.assets.v1beta2.Experiment.create_time:type_name -> google.protobuf.Timestamp + 3, // 3: odpf.assets.v1beta2.Experiment.update_time:type_name -> google.protobuf.Timestamp + 2, // 4: odpf.assets.v1beta2.Experiment.Variant.attributes:type_name -> google.protobuf.Struct + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_odpf_assets_v1beta2_experiment_proto_init() } +func file_odpf_assets_v1beta2_experiment_proto_init() { + if File_odpf_assets_v1beta2_experiment_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_odpf_assets_v1beta2_experiment_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Experiment); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_assets_v1beta2_experiment_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Experiment_Variant); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_odpf_assets_v1beta2_experiment_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_odpf_assets_v1beta2_experiment_proto_goTypes, + DependencyIndexes: file_odpf_assets_v1beta2_experiment_proto_depIdxs, + MessageInfos: file_odpf_assets_v1beta2_experiment_proto_msgTypes, + }.Build() + File_odpf_assets_v1beta2_experiment_proto = out.File + file_odpf_assets_v1beta2_experiment_proto_rawDesc = nil + file_odpf_assets_v1beta2_experiment_proto_goTypes = nil + file_odpf_assets_v1beta2_experiment_proto_depIdxs = nil +} diff --git a/models/odpf/assets/v1beta2/metric.pb.go b/models/odpf/assets/v1beta2/metric.pb.go new file mode 100644 index 000000000..699a211e3 --- /dev/null +++ b/models/odpf/assets/v1beta2/metric.pb.go @@ -0,0 +1,240 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: odpf/assets/v1beta2/metric.proto + +package assetsv1beta2 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// A metric is a timeseries aggregation over a table that supports zero or more dimensions. +type Metric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Namespace of the metric. Something like `{project}-{model}` for dbt and + // `schema` for Cube. + Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` + // The field being used to calculate a metric. + FieldName string `protobuf:"bytes,2,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"` + // Type of the evaluated metric. ex: count_distinct, average etc. + MeasureType string `protobuf:"bytes,3,opt,name=measure_type,json=measureType,proto3" json:"measure_type,omitempty"` + // Optional: The query, possibly in SQL representation, with filters and aggregations. + Query string `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` + // Optional: List of attributes the metric has. This could include the + // following: + // - time_grains[repeated string]: One or more "grains" at which the metric + // can be evaluated. Ex: [day, week, month]. + // - dimensions[repeated string]: A list of dimensions to group or filter the + // metric by. Ex: [plan, country]. + // - filters[repeated map]: Predicates for the metric. Ex: + // [{"field": "is_paying", "operator": "is", "value": "true"}]. + Attributes *structpb.Struct `protobuf:"bytes,5,opt,name=attributes,proto3" json:"attributes,omitempty"` + // The timestamp of the metric's creation. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,101,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The timestamp when the metric was last modified. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,102,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` +} + +func (x *Metric) Reset() { + *x = Metric{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_assets_v1beta2_metric_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Metric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Metric) ProtoMessage() {} + +func (x *Metric) ProtoReflect() protoreflect.Message { + mi := &file_odpf_assets_v1beta2_metric_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Metric.ProtoReflect.Descriptor instead. +func (*Metric) Descriptor() ([]byte, []int) { + return file_odpf_assets_v1beta2_metric_proto_rawDescGZIP(), []int{0} +} + +func (x *Metric) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *Metric) GetFieldName() string { + if x != nil { + return x.FieldName + } + return "" +} + +func (x *Metric) GetMeasureType() string { + if x != nil { + return x.MeasureType + } + return "" +} + +func (x *Metric) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +func (x *Metric) GetAttributes() *structpb.Struct { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *Metric) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *Metric) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +var File_odpf_assets_v1beta2_metric_proto protoreflect.FileDescriptor + +var file_odpf_assets_v1beta2_metric_proto_rawDesc = []byte{ + 0x0a, 0x20, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x32, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x13, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb1, 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x37, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, + 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x66, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x52, 0x0a, 0x0e, 0x69, 0x6f, + 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x42, 0x0b, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x6e, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, + 0x3b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_odpf_assets_v1beta2_metric_proto_rawDescOnce sync.Once + file_odpf_assets_v1beta2_metric_proto_rawDescData = file_odpf_assets_v1beta2_metric_proto_rawDesc +) + +func file_odpf_assets_v1beta2_metric_proto_rawDescGZIP() []byte { + file_odpf_assets_v1beta2_metric_proto_rawDescOnce.Do(func() { + file_odpf_assets_v1beta2_metric_proto_rawDescData = protoimpl.X.CompressGZIP(file_odpf_assets_v1beta2_metric_proto_rawDescData) + }) + return file_odpf_assets_v1beta2_metric_proto_rawDescData +} + +var file_odpf_assets_v1beta2_metric_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_odpf_assets_v1beta2_metric_proto_goTypes = []interface{}{ + (*Metric)(nil), // 0: odpf.assets.v1beta2.Metric + (*structpb.Struct)(nil), // 1: google.protobuf.Struct + (*timestamppb.Timestamp)(nil), // 2: google.protobuf.Timestamp +} +var file_odpf_assets_v1beta2_metric_proto_depIdxs = []int32{ + 1, // 0: odpf.assets.v1beta2.Metric.attributes:type_name -> google.protobuf.Struct + 2, // 1: odpf.assets.v1beta2.Metric.create_time:type_name -> google.protobuf.Timestamp + 2, // 2: odpf.assets.v1beta2.Metric.update_time:type_name -> google.protobuf.Timestamp + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_odpf_assets_v1beta2_metric_proto_init() } +func file_odpf_assets_v1beta2_metric_proto_init() { + if File_odpf_assets_v1beta2_metric_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_odpf_assets_v1beta2_metric_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Metric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_odpf_assets_v1beta2_metric_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_odpf_assets_v1beta2_metric_proto_goTypes, + DependencyIndexes: file_odpf_assets_v1beta2_metric_proto_depIdxs, + MessageInfos: file_odpf_assets_v1beta2_metric_proto_msgTypes, + }.Build() + File_odpf_assets_v1beta2_metric_proto = out.File + file_odpf_assets_v1beta2_metric_proto_rawDesc = nil + file_odpf_assets_v1beta2_metric_proto_goTypes = nil + file_odpf_assets_v1beta2_metric_proto_depIdxs = nil +} diff --git a/models/odpf/assets/v1beta2/ml_feature.pb.go b/models/odpf/assets/v1beta2/ml_feature.pb.go new file mode 100644 index 000000000..8e49992f4 --- /dev/null +++ b/models/odpf/assets/v1beta2/ml_feature.pb.go @@ -0,0 +1,412 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: odpf/assets/v1beta2/ml_feature.proto + +package assetsv1beta2 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MLFeature is a Machine Learning(ML) feature. In machine learning, a feature +// is an individual measurable property, typically represented by a column, +// that serves as an input for Machine Learning (ML) algorithms. +type MLFeature struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The name of the field. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // The data type associated with an individual ML Feature. + DataType string `protobuf:"bytes,2,opt,name=data_type,json=dataType,proto3" json:"data_type,omitempty"` + // Optional: Name of the algorithm used to compute the feature, e.g., PCA, + // bucketing etc. + Algorithm string `protobuf:"bytes,3,opt,name=algorithm,proto3" json:"algorithm,omitempty"` + // Optional: Name of the entity instance. + EntityName string `protobuf:"bytes,4,opt,name=entity_name,json=entityName,proto3" json:"entity_name,omitempty"` +} + +func (x *MLFeature) Reset() { + *x = MLFeature{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_assets_v1beta2_ml_feature_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MLFeature) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MLFeature) ProtoMessage() {} + +func (x *MLFeature) ProtoReflect() protoreflect.Message { + mi := &file_odpf_assets_v1beta2_ml_feature_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MLFeature.ProtoReflect.Descriptor instead. +func (*MLFeature) Descriptor() ([]byte, []int) { + return file_odpf_assets_v1beta2_ml_feature_proto_rawDescGZIP(), []int{0} +} + +func (x *MLFeature) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *MLFeature) GetDataType() string { + if x != nil { + return x.DataType + } + return "" +} + +func (x *MLFeature) GetAlgorithm() string { + if x != nil { + return x.Algorithm + } + return "" +} + +func (x *MLFeature) GetEntityName() string { + if x != nil { + return x.EntityName + } + return "" +} + +// MLFeatureTable is a Machine Learning(ML) feature table or view that +// represents a logical group of time-series feature data as it is found in a +// data source. +type MLFeatureTable struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional: Feature store's namespace or project. + Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` + // Optional: The list of entities that this feature view is associated with. + Entities []*MLFeatureTable_Entity `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"` + // Features that are part of the table, akin to columns in a table. + Features []*MLFeature `protobuf:"bytes,3,rep,name=features,proto3" json:"features,omitempty"` + // The timestamp when the feature table was created. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,101,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The timestamp when the feature table was last modified. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,102,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` +} + +func (x *MLFeatureTable) Reset() { + *x = MLFeatureTable{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_assets_v1beta2_ml_feature_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MLFeatureTable) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MLFeatureTable) ProtoMessage() {} + +func (x *MLFeatureTable) ProtoReflect() protoreflect.Message { + mi := &file_odpf_assets_v1beta2_ml_feature_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MLFeatureTable.ProtoReflect.Descriptor instead. +func (*MLFeatureTable) Descriptor() ([]byte, []int) { + return file_odpf_assets_v1beta2_ml_feature_proto_rawDescGZIP(), []int{1} +} + +func (x *MLFeatureTable) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *MLFeatureTable) GetEntities() []*MLFeatureTable_Entity { + if x != nil { + return x.Entities + } + return nil +} + +func (x *MLFeatureTable) GetFeatures() []*MLFeature { + if x != nil { + return x.Features + } + return nil +} + +func (x *MLFeatureTable) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *MLFeatureTable) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +// An entity is a collection of semantically related features. Users define +// entities to map to the domain of their use case. For example, a +// ride-hailing service could have customers and drivers as their entities, +// which group related features that correspond to these customers and drivers. +type MLFeatureTable_Entity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The unique name of the entity. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // A property that uniquely identifies different entities within the + // collection. The join_key property is typically used for joining entities + // with their associated features. + JoinKeys []string `protobuf:"bytes,2,rep,name=join_keys,json=joinKeys,proto3" json:"join_keys,omitempty"` + // Optional: Arbitrary metadata. + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *MLFeatureTable_Entity) Reset() { + *x = MLFeatureTable_Entity{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_assets_v1beta2_ml_feature_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MLFeatureTable_Entity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MLFeatureTable_Entity) ProtoMessage() {} + +func (x *MLFeatureTable_Entity) ProtoReflect() protoreflect.Message { + mi := &file_odpf_assets_v1beta2_ml_feature_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MLFeatureTable_Entity.ProtoReflect.Descriptor instead. +func (*MLFeatureTable_Entity) Descriptor() ([]byte, []int) { + return file_odpf_assets_v1beta2_ml_feature_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *MLFeatureTable_Entity) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *MLFeatureTable_Entity) GetJoinKeys() []string { + if x != nil { + return x.JoinKeys + } + return nil +} + +func (x *MLFeatureTable_Entity) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +var File_odpf_assets_v1beta2_ml_feature_proto protoreflect.FileDescriptor + +var file_odpf_assets_v1beta2_ml_feature_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x32, 0x2f, 0x6d, 0x6c, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7b, 0x0a, 0x09, + 0x4d, 0x4c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, + 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6c, + 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, + 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xf3, 0x03, 0x0a, 0x0e, 0x4d, 0x4c, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, + 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x32, 0x2e, 0x4d, 0x4c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x2e, 0x4d, 0x4c, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x3b, + 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x65, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0xc4, 0x01, 0x0a, 0x06, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, + 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6a, 0x6f, 0x69, 0x6e, + 0x4b, 0x65, 0x79, 0x73, 0x12, 0x4e, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x2e, 0x4d, 0x4c, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, + 0x55, 0x0a, 0x0e, 0x69, 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x73, 0x42, 0x0e, 0x4d, 0x4c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, + 0x70, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x3b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_odpf_assets_v1beta2_ml_feature_proto_rawDescOnce sync.Once + file_odpf_assets_v1beta2_ml_feature_proto_rawDescData = file_odpf_assets_v1beta2_ml_feature_proto_rawDesc +) + +func file_odpf_assets_v1beta2_ml_feature_proto_rawDescGZIP() []byte { + file_odpf_assets_v1beta2_ml_feature_proto_rawDescOnce.Do(func() { + file_odpf_assets_v1beta2_ml_feature_proto_rawDescData = protoimpl.X.CompressGZIP(file_odpf_assets_v1beta2_ml_feature_proto_rawDescData) + }) + return file_odpf_assets_v1beta2_ml_feature_proto_rawDescData +} + +var file_odpf_assets_v1beta2_ml_feature_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_odpf_assets_v1beta2_ml_feature_proto_goTypes = []interface{}{ + (*MLFeature)(nil), // 0: odpf.assets.v1beta2.MLFeature + (*MLFeatureTable)(nil), // 1: odpf.assets.v1beta2.MLFeatureTable + (*MLFeatureTable_Entity)(nil), // 2: odpf.assets.v1beta2.MLFeatureTable.Entity + nil, // 3: odpf.assets.v1beta2.MLFeatureTable.Entity.LabelsEntry + (*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp +} +var file_odpf_assets_v1beta2_ml_feature_proto_depIdxs = []int32{ + 2, // 0: odpf.assets.v1beta2.MLFeatureTable.entities:type_name -> odpf.assets.v1beta2.MLFeatureTable.Entity + 0, // 1: odpf.assets.v1beta2.MLFeatureTable.features:type_name -> odpf.assets.v1beta2.MLFeature + 4, // 2: odpf.assets.v1beta2.MLFeatureTable.create_time:type_name -> google.protobuf.Timestamp + 4, // 3: odpf.assets.v1beta2.MLFeatureTable.update_time:type_name -> google.protobuf.Timestamp + 3, // 4: odpf.assets.v1beta2.MLFeatureTable.Entity.labels:type_name -> odpf.assets.v1beta2.MLFeatureTable.Entity.LabelsEntry + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_odpf_assets_v1beta2_ml_feature_proto_init() } +func file_odpf_assets_v1beta2_ml_feature_proto_init() { + if File_odpf_assets_v1beta2_ml_feature_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_odpf_assets_v1beta2_ml_feature_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MLFeature); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_assets_v1beta2_ml_feature_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MLFeatureTable); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_assets_v1beta2_ml_feature_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MLFeatureTable_Entity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_odpf_assets_v1beta2_ml_feature_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_odpf_assets_v1beta2_ml_feature_proto_goTypes, + DependencyIndexes: file_odpf_assets_v1beta2_ml_feature_proto_depIdxs, + MessageInfos: file_odpf_assets_v1beta2_ml_feature_proto_msgTypes, + }.Build() + File_odpf_assets_v1beta2_ml_feature_proto = out.File + file_odpf_assets_v1beta2_ml_feature_proto_rawDesc = nil + file_odpf_assets_v1beta2_ml_feature_proto_goTypes = nil + file_odpf_assets_v1beta2_ml_feature_proto_depIdxs = nil +} diff --git a/models/odpf/assets/v1beta2/ml_model.pb.go b/models/odpf/assets/v1beta2/ml_model.pb.go new file mode 100644 index 000000000..a879e33b0 --- /dev/null +++ b/models/odpf/assets/v1beta2/ml_model.pb.go @@ -0,0 +1,437 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: odpf/assets/v1beta2/ml_model.proto + +package assetsv1beta2 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// MLModel represents a Machine Learning(ML) Model. Models are algorithms trained +// on data to find patterns or make predictions. Models typically consume +// ML features to generate a meaningful output. The inputs can also include +// contextual information that is made available in realtime as part of the +// request to the model server. +type MLModel struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional: Model's namespace or project. + Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` + // Flavor of the ML Model. ex: pytorch, tensorflow etc. + Flavor string `protobuf:"bytes,2,opt,name=flavor,proto3" json:"flavor,omitempty"` + // Optional: Algorithm used to train the ML Model. + Algorithm string `protobuf:"bytes,3,opt,name=algorithm,proto3" json:"algorithm,omitempty"` + // The schema of a model’s inputs and outputs. + Signature *MLModel_Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` + // Status of the model. ex: pending/ready/serving/terminated etc. + State string `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"` + // Version of the model + Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` + // List of attributes the model has. This could include the following: + // - endpoint_url[string]: Endpoint that the model is serving requests on. + // Ex: http://-... + // - version_endpoint_url[string]: Endpoint that the model is serving + // requests on for the specific version. Ex: + // http://-... + // - traffic[double]: Percentage of traffic being served by this version of + // the model. + // - params[map]: Parameters for the Model's run. + // - metrics[map]: Metrics for the model's run. + Attributes *structpb.Struct `protobuf:"bytes,7,opt,name=attributes,proto3" json:"attributes,omitempty"` + // The timestamp of the model's creation. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,101,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The timestamp when the model was last modified. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,102,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` +} + +func (x *MLModel) Reset() { + *x = MLModel{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_assets_v1beta2_ml_model_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MLModel) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MLModel) ProtoMessage() {} + +func (x *MLModel) ProtoReflect() protoreflect.Message { + mi := &file_odpf_assets_v1beta2_ml_model_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MLModel.ProtoReflect.Descriptor instead. +func (*MLModel) Descriptor() ([]byte, []int) { + return file_odpf_assets_v1beta2_ml_model_proto_rawDescGZIP(), []int{0} +} + +func (x *MLModel) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *MLModel) GetFlavor() string { + if x != nil { + return x.Flavor + } + return "" +} + +func (x *MLModel) GetAlgorithm() string { + if x != nil { + return x.Algorithm + } + return "" +} + +func (x *MLModel) GetSignature() *MLModel_Signature { + if x != nil { + return x.Signature + } + return nil +} + +func (x *MLModel) GetState() string { + if x != nil { + return x.State + } + return "" +} + +func (x *MLModel) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *MLModel) GetAttributes() *structpb.Struct { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *MLModel) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *MLModel) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +// Schema of the model's inputs and outputs. Strongly inspired by +// https://mlflow.org/docs/latest/python_api/mlflow.models.html#mlflow.models.ModelSignature. +type MLModel_Signature struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Inputs []*MLModel_Signature_Parameter `protobuf:"bytes,1,rep,name=inputs,proto3" json:"inputs,omitempty"` + Outputs []*MLModel_Signature_Parameter `protobuf:"bytes,2,rep,name=outputs,proto3" json:"outputs,omitempty"` +} + +func (x *MLModel_Signature) Reset() { + *x = MLModel_Signature{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_assets_v1beta2_ml_model_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MLModel_Signature) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MLModel_Signature) ProtoMessage() {} + +func (x *MLModel_Signature) ProtoReflect() protoreflect.Message { + mi := &file_odpf_assets_v1beta2_ml_model_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MLModel_Signature.ProtoReflect.Descriptor instead. +func (*MLModel_Signature) Descriptor() ([]byte, []int) { + return file_odpf_assets_v1beta2_ml_model_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *MLModel_Signature) GetInputs() []*MLModel_Signature_Parameter { + if x != nil { + return x.Inputs + } + return nil +} + +func (x *MLModel_Signature) GetOutputs() []*MLModel_Signature_Parameter { + if x != nil { + return x.Outputs + } + return nil +} + +// Specification of name and type of a single column in a dataset. +type MLModel_Signature_Parameter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional: Name of the input or output parameter. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Data type of the parameter. Ex: boolean, double, numpy's dtypes etc. + DataType string `protobuf:"bytes,2,opt,name=data_type,json=dataType,proto3" json:"data_type,omitempty"` + // Optional: The tensor shape. + Shape []int64 `protobuf:"varint,3,rep,packed,name=shape,proto3" json:"shape,omitempty"` +} + +func (x *MLModel_Signature_Parameter) Reset() { + *x = MLModel_Signature_Parameter{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_assets_v1beta2_ml_model_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MLModel_Signature_Parameter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MLModel_Signature_Parameter) ProtoMessage() {} + +func (x *MLModel_Signature_Parameter) ProtoReflect() protoreflect.Message { + mi := &file_odpf_assets_v1beta2_ml_model_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MLModel_Signature_Parameter.ProtoReflect.Descriptor instead. +func (*MLModel_Signature_Parameter) Descriptor() ([]byte, []int) { + return file_odpf_assets_v1beta2_ml_model_proto_rawDescGZIP(), []int{0, 0, 0} +} + +func (x *MLModel_Signature_Parameter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *MLModel_Signature_Parameter) GetDataType() string { + if x != nil { + return x.DataType + } + return "" +} + +func (x *MLModel_Signature_Parameter) GetShape() []int64 { + if x != nil { + return x.Shape + } + return nil +} + +var File_odpf_assets_v1beta2_ml_model_proto protoreflect.FileDescriptor + +var file_odpf_assets_v1beta2_ml_model_proto_rawDesc = []byte{ + 0x0a, 0x22, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x32, 0x2f, 0x6d, 0x6c, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfe, 0x04, 0x0a, 0x07, 0x4d, 0x4c, 0x4d, + 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6c, 0x61, 0x76, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x66, 0x6c, 0x61, 0x76, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6c, + 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, + 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x44, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x64, + 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x32, 0x2e, 0x4d, 0x4c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x37, + 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0a, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x1a, 0xf5, 0x01, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, + 0x48, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x32, 0x2e, 0x4d, 0x4c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x4a, 0x0a, 0x07, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6f, 0x64, 0x70, + 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, + 0x2e, 0x4d, 0x4c, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x07, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x73, 0x1a, 0x52, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x03, 0x52, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x42, 0x53, 0x0a, 0x0e, 0x69, 0x6f, 0x2e, + 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x42, 0x0c, 0x4d, 0x4c, 0x4d, + 0x6f, 0x64, 0x65, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x6e, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, + 0x3b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_odpf_assets_v1beta2_ml_model_proto_rawDescOnce sync.Once + file_odpf_assets_v1beta2_ml_model_proto_rawDescData = file_odpf_assets_v1beta2_ml_model_proto_rawDesc +) + +func file_odpf_assets_v1beta2_ml_model_proto_rawDescGZIP() []byte { + file_odpf_assets_v1beta2_ml_model_proto_rawDescOnce.Do(func() { + file_odpf_assets_v1beta2_ml_model_proto_rawDescData = protoimpl.X.CompressGZIP(file_odpf_assets_v1beta2_ml_model_proto_rawDescData) + }) + return file_odpf_assets_v1beta2_ml_model_proto_rawDescData +} + +var file_odpf_assets_v1beta2_ml_model_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_odpf_assets_v1beta2_ml_model_proto_goTypes = []interface{}{ + (*MLModel)(nil), // 0: odpf.assets.v1beta2.MLModel + (*MLModel_Signature)(nil), // 1: odpf.assets.v1beta2.MLModel.Signature + (*MLModel_Signature_Parameter)(nil), // 2: odpf.assets.v1beta2.MLModel.Signature.Parameter + (*structpb.Struct)(nil), // 3: google.protobuf.Struct + (*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp +} +var file_odpf_assets_v1beta2_ml_model_proto_depIdxs = []int32{ + 1, // 0: odpf.assets.v1beta2.MLModel.signature:type_name -> odpf.assets.v1beta2.MLModel.Signature + 3, // 1: odpf.assets.v1beta2.MLModel.attributes:type_name -> google.protobuf.Struct + 4, // 2: odpf.assets.v1beta2.MLModel.create_time:type_name -> google.protobuf.Timestamp + 4, // 3: odpf.assets.v1beta2.MLModel.update_time:type_name -> google.protobuf.Timestamp + 2, // 4: odpf.assets.v1beta2.MLModel.Signature.inputs:type_name -> odpf.assets.v1beta2.MLModel.Signature.Parameter + 2, // 5: odpf.assets.v1beta2.MLModel.Signature.outputs:type_name -> odpf.assets.v1beta2.MLModel.Signature.Parameter + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_odpf_assets_v1beta2_ml_model_proto_init() } +func file_odpf_assets_v1beta2_ml_model_proto_init() { + if File_odpf_assets_v1beta2_ml_model_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_odpf_assets_v1beta2_ml_model_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MLModel); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_assets_v1beta2_ml_model_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MLModel_Signature); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_odpf_assets_v1beta2_ml_model_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MLModel_Signature_Parameter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_odpf_assets_v1beta2_ml_model_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_odpf_assets_v1beta2_ml_model_proto_goTypes, + DependencyIndexes: file_odpf_assets_v1beta2_ml_model_proto_depIdxs, + MessageInfos: file_odpf_assets_v1beta2_ml_model_proto_msgTypes, + }.Build() + File_odpf_assets_v1beta2_ml_model_proto = out.File + file_odpf_assets_v1beta2_ml_model_proto_rawDesc = nil + file_odpf_assets_v1beta2_ml_model_proto_goTypes = nil + file_odpf_assets_v1beta2_ml_model_proto_depIdxs = nil +} diff --git a/models/odpf/assets/v1beta2/service.pb.go b/models/odpf/assets/v1beta2/service.pb.go new file mode 100644 index 000000000..f5734ab5a --- /dev/null +++ b/models/odpf/assets/v1beta2/service.pb.go @@ -0,0 +1,192 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: odpf/assets/v1beta2/service.proto + +package assetsv1beta2 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Service struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The service/application's ID + ApplicationId string `protobuf:"bytes,1,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` + // Optional: The version of the service. + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // The timestamp of the service's creation. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,101,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The timestamp when the service was last modified. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,102,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` +} + +func (x *Service) Reset() { + *x = Service{} + if protoimpl.UnsafeEnabled { + mi := &file_odpf_assets_v1beta2_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Service) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Service) ProtoMessage() {} + +func (x *Service) ProtoReflect() protoreflect.Message { + mi := &file_odpf_assets_v1beta2_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Service.ProtoReflect.Descriptor instead. +func (*Service) Descriptor() ([]byte, []int) { + return file_odpf_assets_v1beta2_service_proto_rawDescGZIP(), []int{0} +} + +func (x *Service) GetApplicationId() string { + if x != nil { + return x.ApplicationId + } + return "" +} + +func (x *Service) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *Service) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *Service) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +var File_odpf_assets_v1beta2_service_proto protoreflect.FileDescriptor + +var file_odpf_assets_v1beta2_service_proto_rawDesc = []byte{ + 0x0a, 0x21, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x32, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc4, 0x01, 0x0a, 0x07, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x42, 0x53, 0x0a, 0x0e, 0x69, 0x6f, 0x2e, 0x6f, 0x64, 0x70, 0x66, 0x2e, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x73, 0x42, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, + 0x66, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x32, 0x3b, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_odpf_assets_v1beta2_service_proto_rawDescOnce sync.Once + file_odpf_assets_v1beta2_service_proto_rawDescData = file_odpf_assets_v1beta2_service_proto_rawDesc +) + +func file_odpf_assets_v1beta2_service_proto_rawDescGZIP() []byte { + file_odpf_assets_v1beta2_service_proto_rawDescOnce.Do(func() { + file_odpf_assets_v1beta2_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_odpf_assets_v1beta2_service_proto_rawDescData) + }) + return file_odpf_assets_v1beta2_service_proto_rawDescData +} + +var file_odpf_assets_v1beta2_service_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_odpf_assets_v1beta2_service_proto_goTypes = []interface{}{ + (*Service)(nil), // 0: odpf.assets.v1beta2.Service + (*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp +} +var file_odpf_assets_v1beta2_service_proto_depIdxs = []int32{ + 1, // 0: odpf.assets.v1beta2.Service.create_time:type_name -> google.protobuf.Timestamp + 1, // 1: odpf.assets.v1beta2.Service.update_time:type_name -> google.protobuf.Timestamp + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_odpf_assets_v1beta2_service_proto_init() } +func file_odpf_assets_v1beta2_service_proto_init() { + if File_odpf_assets_v1beta2_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_odpf_assets_v1beta2_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Service); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_odpf_assets_v1beta2_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_odpf_assets_v1beta2_service_proto_goTypes, + DependencyIndexes: file_odpf_assets_v1beta2_service_proto_depIdxs, + MessageInfos: file_odpf_assets_v1beta2_service_proto_msgTypes, + }.Build() + File_odpf_assets_v1beta2_service_proto = out.File + file_odpf_assets_v1beta2_service_proto_rawDesc = nil + file_odpf_assets_v1beta2_service_proto_goTypes = nil + file_odpf_assets_v1beta2_service_proto_depIdxs = nil +} diff --git a/plugins/extractors/caramlstore/README.md b/plugins/extractors/caramlstore/README.md new file mode 100644 index 000000000..59210becc --- /dev/null +++ b/plugins/extractors/caramlstore/README.md @@ -0,0 +1,68 @@ +# caramlstore + +Extractor for Machine Learning(ML) Features from [caraml-store][caraml-store]. + +The extractor uses the [`CoreService.proto`][coreservice.proto] service exposed by +[caraml-store][caraml-store] to extract feature tables. + +## Usage + +```yaml +source: + name: caramlstore + scope: caramlstore-stg + config: + url: staging.caraml-store.com:80 + max_size_in_mb: 10 + request_timeout: 30s +``` + +## Inputs + +| Key | Value | Example | Description | Required? | +|:------------------|:---------|:----------------------|:----------------------------------------------------------|:----------| +| `url` | `string` | `caraml-store.com:80` | caraml-store's host URL | ✅ | +| `max_size_in_mb` | `int` | `10` | Max MB for gRPC client to receive message. Default is 45. | ❌ | +| `request_timeout` | `string` | `10s` | Timeout for gRPC requests to caraml-store | ❌ | + +## Outputs + +The feature tables are mapped to an [`Asset`][proton-asset] with model specific +metadata stored using [`MLFeatureTable`][proton-mlfeaturetable]. Please refer +the proto definitions for more information. + +| Field | Value | Sample Value | +|:-------------------|:----------------------------------------------------------------|:-----------------------------------------------------------------------------| +| `resource.urn` | `urn:caramlstore:{scope}:ml-feature-table:{feature_table_name}` | `urn:caramlstore:caramlstore-stg:ml_feature_table:merchant_uuid_t2_discovery` | +| `resource.name` | `{feature_table.name}` | `merchant_uuid_t2_discovery` | +| `resource.service` | `caramlstore` | `caramlstore` | +| `resource.type` | `ml_feature_table` | `ml_feature_table` | +| `namespace` | `{feature_table.project}` | `my_project` | +| `entities` | [`[]Entity`](#entity) | | +| `features` | [`[]Feature`](#feature) | | +| `create_time` | `{feature_table.created_timestamp}` | `2022-08-08T03:17:54Z` | +| `update_time` | `{feature_table.updated_timestamp}` | `2022-08-08T03:57:54Z` | + +### Entity + +| Field | Value | Sample Value | +|:---------|:--------------------|:--------------------------------------------------------| +| `name` | `{entity.name}` | `service_type` | +| `labels` | `map[string]string` | `{"description":"merchant uuid","value_type":"STRING"}` | + +### Feature + +| Field | Value | Sample Value | +|:------------|:------------------------|:----------------------| +| `name` | `{feature.name}` | `avg_gmv_merchant_1d` | +| `data_type` | `{features.value_type}` | `INT64` | + +## Contributing + +Refer to the [contribution guidelines](../../../docs/contribute/guide.md#adding-a-new-extractor) +for information on contributing to this module. + +[caraml-store]: https://github.com/caraml-dev/caraml-store +[coreservice.proto]: https://github.com/caraml-dev/caraml-store/blob/v0.1.1/caraml-store-protobuf/src/main/proto/feast/core/CoreService.proto#L12 +[proton-asset]: https://github.com/odpf/proton/blob/ff960a3/odpf/assets/v1beta2/asset.proto#L14 +[proton-mlfeaturetable]: https://github.com/odpf/proton/blob/ff960a3/odpf/assets/v1beta2/ml_feature.proto#L32 diff --git a/plugins/extractors/caramlstore/asset_builder.go b/plugins/extractors/caramlstore/asset_builder.go new file mode 100644 index 000000000..c7f85311d --- /dev/null +++ b/plugins/extractors/caramlstore/asset_builder.go @@ -0,0 +1,198 @@ +package caramlstore + +import ( + "errors" + "fmt" + "net" + "sort" + "strings" + + "github.com/odpf/meteor/models" + v1beta2 "github.com/odpf/meteor/models/odpf/assets/v1beta2" + "github.com/odpf/meteor/plugins" + "github.com/odpf/meteor/plugins/extractors/caramlstore/internal/core" + "google.golang.org/protobuf/types/known/anypb" +) + +const ( + service = "caramlstore" + typ = "ml_feature_table" +) + +type featureTableBuilder struct { + scope string + project string + entities map[string]*core.Entity +} + +func (b featureTableBuilder) buildAsset(ft *core.FeatureTable) (*v1beta2.Asset, error) { + fail := func(step string, err error) (*v1beta2.Asset, error) { + return nil, fmt.Errorf( + "build %s for feature table '%s' in project '%s': %w", + step, ft.Spec.Name, b.project, err, + ) + } + + upstreams, downstreams, err := b.buildLineage(ft) + if err != nil { + return fail("lineage", err) + } + + entities, err := b.buildEntities(ft) + if err != nil { + return fail("entities", err) + } + + featureTable, err := anypb.New(&v1beta2.MLFeatureTable{ + Namespace: b.project, + Entities: entities, + Features: b.buildFeatures(ft), + CreateTime: ft.Meta.CreatedTimestamp, + UpdateTime: ft.Meta.LastUpdatedTimestamp, + }) + if err != nil { + return fail("metadata", err) + } + + return &v1beta2.Asset{ + Urn: models.NewURN(service, b.scope, typ, ft.Spec.Name), + Name: ft.Spec.Name, + Service: service, + Type: typ, + Data: featureTable, + Lineage: &v1beta2.Lineage{ + Upstreams: upstreams, + Downstreams: downstreams, + }, + Labels: ft.Spec.Labels, + }, nil +} + +func (b featureTableBuilder) buildLineage(ft *core.FeatureTable) ( + upstreams []*v1beta2.Resource, downstreams []*v1beta2.Resource, err error, +) { + upstreams, err = b.buildUpstreams(ft) + if err != nil { + return nil, nil, fmt.Errorf("build lineage: %w", err) + } + + return upstreams, nil, nil +} + +func (b featureTableBuilder) buildEntities(ft *core.FeatureTable) ([]*v1beta2.MLFeatureTable_Entity, error) { + entities := make([]*v1beta2.MLFeatureTable_Entity, 0, len(ft.Spec.Entities)) + for _, e := range ft.Spec.Entities { + entity, ok := b.entities[e] + if !ok { + return nil, fmt.Errorf("entity '%s' not found in project '%s", e, b.project) + } + + labels := map[string]string{ + "value_type": entity.Spec.ValueType.String(), + "description": entity.Spec.Description, + } + for k, v := range entity.Spec.Labels { + labels[k] = v + } + + entities = append(entities, &v1beta2.MLFeatureTable_Entity{ + Name: entity.Spec.Name, + Labels: labels, + }) + } + + return entities, nil +} + +func (b featureTableBuilder) buildFeatures(ft *core.FeatureTable) []*v1beta2.MLFeature { + features := make([]*v1beta2.MLFeature, 0, len(ft.Spec.Features)) + for _, f := range ft.Spec.Features { + features = append(features, &v1beta2.MLFeature{ + Name: f.Name, + DataType: f.ValueType.String(), + }) + } + + return features +} + +func (b featureTableBuilder) buildUpstreams(ft *core.FeatureTable) ([]*v1beta2.Resource, error) { + var ups []*v1beta2.Resource + if src := ft.Spec.BatchSource; src != nil { + // core.DataSource_BATCH_FILE is currently unsupported for constructing lineage + switch src.Type { + case core.DataSource_BATCH_BIGQUERY: + opts := src.GetBigqueryOptions() + if opts == nil { + return nil, errors.New("build upstream: empty big query data source options") + } + + urn, err := mapBQTableURN(opts.TableRef) + if err != nil { + return nil, fmt.Errorf("build upstream: table ref: %s: %w", opts.TableRef, err) + } + + ups = append(ups, &v1beta2.Resource{ + Urn: urn, + Service: "bigquery", + Type: "table", + }) + } + } + if src := ft.Spec.StreamSource; src != nil { + // core.DataSource_STREAM_KINESIS is currently unsupported for constructing lineage + switch src.Type { + case core.DataSource_STREAM_KAFKA: + opts := src.GetKafkaOptions() + if opts == nil { + return nil, errors.New("build upstream: empty kafka data source options") + } + + ups = append(ups, &v1beta2.Resource{ + Urn: models.NewURN("kafka", parseKafkaScope(opts.BootstrapServers), "topic", opts.Topic), + Service: "kafka", + Type: "topic", + }) + } + } + + return ups, nil +} + +func mapBQTableURN(tableRef string) (string, error) { + projectID, datasetID, tableID, err := parseBQTableFQN(tableRef) + if err != nil { + return "", fmt.Errorf("map URN: %w", err) + } + + return plugins.BigQueryURN(projectID, datasetID, tableID), nil +} + +func parseBQTableFQN(fqn string) (projectID, datasetID, tableID string, err error) { + // fqn is the ID of the table in projectID:datasetID.tableID format. + if !strings.ContainsRune(fqn, ':') || strings.IndexRune(fqn, '.') < strings.IndexRune(fqn, ':') { + return "", "", "", fmt.Errorf( + "unexpected BigQuery table FQN '%s', expected in format projectID:datasetID.tableID", fqn, + ) + } + ss := strings.FieldsFunc(fqn, func(r rune) bool { + return r == ':' || r == '.' + }) + return ss[0], ss[1], ss[2], nil +} + +func parseKafkaScope(servers string) string { + if strings.IndexRune(servers, ',') > 0 { + // there are multiple bootstrap servers, just sort and join + ss := strings.Split(servers, ",") + sort.Strings(ss) + return strings.Join(ss, ",") + } + + host, _, err := net.SplitHostPort(servers) + if err != nil { + return servers + } + + return host +} diff --git a/plugins/extractors/caramlstore/caramlstore.go b/plugins/extractors/caramlstore/caramlstore.go new file mode 100644 index 000000000..efddf4c9c --- /dev/null +++ b/plugins/extractors/caramlstore/caramlstore.go @@ -0,0 +1,151 @@ +package caramlstore + +import ( + "context" + _ "embed" // used to print the embedded assets + "fmt" + "time" + + "github.com/odpf/meteor/models" + "github.com/odpf/meteor/plugins" + "github.com/odpf/meteor/plugins/extractors/caramlstore/internal/core" + "github.com/odpf/meteor/registry" + "github.com/odpf/meteor/utils" + "github.com/odpf/salt/log" + "google.golang.org/grpc/codes" +) + +// Register the extractor to catalog +func init() { + if err := registry.Extractors.Register("caramlstore", func() plugins.Extractor { + return New(plugins.GetLog(), newGRPCClient()) + }); err != nil { + panic(err) + } +} + +//go:embed README.md +var summary string + +// Config holds the set of configuration for the bigquery extractor +type Config struct { + URL string `mapstructure:"url" validate:"required"` + MaxSizeInMB int `mapstructure:"max_size_in_mb"` + RequestTimeout time.Duration `mapstructure:"request_timeout" validate:"min=1ms" default:"10s"` +} + +var sampleConfig = `url: caraml-store.com:80` + +var info = plugins.Info{ + Description: "CaraML store ML feature metadata", + SampleConfig: sampleConfig, + Summary: summary, + Tags: []string{"caraml", "caramlstore", "ml", "feature", "extractor"}, +} + +// Extractor manages the communication with the bigquery service +type Extractor struct { + plugins.BaseExtractor + + logger log.Logger + config Config + client Client +} + +//go:generate mockery --name=Client -r --case underscore --with-expecter --structname CaraMLClient --filename caraml_client_mock.go --output=./internal/mocks + +type Client interface { + Connect(ctx context.Context, host string, maxSizeInMB int, timeout time.Duration) error + Projects(ctx context.Context) ([]string, error) + Entities(ctx context.Context, project string) (map[string]*core.Entity, error) + FeatureTables(ctx context.Context, project string) ([]*core.FeatureTable, error) + Close() error +} + +func New(logger log.Logger, client Client) *Extractor { + e := &Extractor{ + logger: logger, + client: client, + } + e.BaseExtractor = plugins.NewBaseExtractor(info, &e.config) + + return e +} + +// Init initializes the extractor +func (e *Extractor) Init(ctx context.Context, config plugins.Config) error { + if err := e.BaseExtractor.Init(ctx, config); err != nil { + return err + } + + cfg := e.config + if err := e.client.Connect(ctx, cfg.URL, cfg.MaxSizeInMB, cfg.RequestTimeout); err != nil { + return fmt.Errorf("connect to host URL: %w", err) + } + + return nil +} + +// Extract checks if the table is valid and extracts the table schema +func (e *Extractor) Extract(ctx context.Context, emit plugins.Emit) error { + defer e.client.Close() + + projects, err := e.client.Projects(ctx) + if err != nil { + if shouldRetry(err) { + return plugins.NewRetryError(err) + } + + return err + } + + for _, p := range projects { + entities, err := e.client.Entities(ctx, p) + if err != nil { + e.logger.Error("caramlstore extractor", "project", p, "err", err) + continue + } + + fts, err := e.client.FeatureTables(ctx, p) + if err != nil { + e.logger.Error("caramlstore extractor", "project", p, "err", err) + continue + } + + b := featureTableBuilder{ + scope: e.UrnScope, + project: p, + entities: entities, + } + for _, ft := range fts { + asset, err := b.buildAsset(ft) + if err != nil { + e.logger.Error( + "caramlstore extractor", + "project", p, + "feature_table", ft.Spec.Name, + "err", err, + ) + continue + } + + emit(models.NewRecord(asset)) + } + } + + return nil +} + +func shouldRetry(err error) bool { + switch utils.StatusCode(err) { + case codes.Canceled, + codes.DeadlineExceeded, + codes.ResourceExhausted, + codes.Internal, + codes.Unavailable: + + return true + } + + return false +} diff --git a/plugins/extractors/caramlstore/caramlstore_core_client.go b/plugins/extractors/caramlstore/caramlstore_core_client.go new file mode 100644 index 000000000..1fd565ac5 --- /dev/null +++ b/plugins/extractors/caramlstore/caramlstore_core_client.go @@ -0,0 +1,132 @@ +package caramlstore + +import ( + "context" + "fmt" + "time" + + grpcmw "github.com/grpc-ecosystem/go-grpc-middleware" + grpcretry "github.com/grpc-ecosystem/go-grpc-middleware/retry" + grpcprom "github.com/grpc-ecosystem/go-grpc-prometheus" + "github.com/odpf/meteor/plugins/extractors/caramlstore/internal/core" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +const ( + gRPCMaxClientSendSizeMB = 45 + gRPCMaxClientRecvSizeMB = 45 + gRPCMaxRetry = 3 +) + +type gRPCClient struct { + opts []grpc.DialOption + core.CoreServiceClient + + conn *grpc.ClientConn + timeout time.Duration +} + +func newGRPCClient(opts ...grpc.DialOption) *gRPCClient { + return &gRPCClient{opts: opts} +} + +func (c *gRPCClient) Connect(ctx context.Context, hostURL string, maxSizeInMB int, timeout time.Duration) error { + ctx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() + + conn, err := c.createConnection(ctx, hostURL, maxSizeInMB) + if err != nil { + return fmt.Errorf("error creating connection: %w", err) + } + + c.timeout = timeout + c.conn = conn + c.CoreServiceClient = core.NewCoreServiceClient(c.conn) + + return nil +} + +func (c *gRPCClient) Projects(ctx context.Context) ([]string, error) { + ctx, cancel := context.WithTimeout(ctx, c.timeout) + defer cancel() + + res, err := c.ListProjects(ctx, &core.ListProjectsRequest{}) + if err != nil { + return nil, fmt.Errorf("caramlstore gRPC client: fetch projects: %w", err) + } + + return res.Projects, nil +} + +func (c *gRPCClient) Entities(ctx context.Context, project string) (map[string]*core.Entity, error) { + ctx, cancel := context.WithTimeout(ctx, c.timeout) + defer cancel() + + res, err := c.ListEntities(ctx, &core.ListEntitiesRequest{ + Filter: &core.ListEntitiesRequest_Filter{ + Project: project, + }, + }) + if err != nil { + return nil, fmt.Errorf("caramlstore gRPC client: fetch entities in project '%s': %w", project, err) + } + + entities := make(map[string]*core.Entity, len(res.Entities)) + for _, e := range res.Entities { + entities[e.Spec.Name] = e + } + + return entities, nil +} + +func (c *gRPCClient) FeatureTables(ctx context.Context, project string) ([]*core.FeatureTable, error) { + ctx, cancel := context.WithTimeout(ctx, c.timeout) + defer cancel() + + res, err := c.ListFeatureTables(ctx, &core.ListFeatureTablesRequest{ + Filter: &core.ListFeatureTablesRequest_Filter{ + Project: project, + }, + }) + if err != nil { + return nil, fmt.Errorf("caramlstore gRPC client: fetch feature tables in project '%s': %w", project, err) + } + + return res.Tables, nil +} + +func (c *gRPCClient) Close() error { + return c.conn.Close() +} + +func (c *gRPCClient) createConnection(ctx context.Context, hostURL string, maxSizeInMB int) (*grpc.ClientConn, error) { + if maxSizeInMB <= 0 { + maxSizeInMB = gRPCMaxClientRecvSizeMB + } + + opts := []grpc.DialOption{ + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithBlock(), + grpc.WithDefaultCallOptions( + grpc.MaxCallSendMsgSize(gRPCMaxClientSendSizeMB<<20), + grpc.MaxCallRecvMsgSize(maxSizeInMB<<20), + ), + grpc.WithUnaryInterceptor(grpcmw.ChainUnaryClient( + grpcretry.UnaryClientInterceptor( + grpcretry.WithBackoff(grpcretry.BackoffExponential(100*time.Millisecond)), + grpcretry.WithMax(gRPCMaxRetry), + ), + otelgrpc.UnaryClientInterceptor(), + grpcprom.UnaryClientInterceptor, + )), + grpc.WithStreamInterceptor(grpcmw.ChainStreamClient( + otelgrpc.StreamClientInterceptor(), + grpcprom.StreamClientInterceptor, + )), + } + opts = append(opts, c.opts...) + + return grpc.DialContext(ctx, hostURL, opts...) +} diff --git a/plugins/extractors/caramlstore/caramlstore_test.go b/plugins/extractors/caramlstore/caramlstore_test.go new file mode 100644 index 000000000..d67d3e480 --- /dev/null +++ b/plugins/extractors/caramlstore/caramlstore_test.go @@ -0,0 +1,268 @@ +//go:build plugins +// +build plugins + +package caramlstore + +import ( + "context" + "net" + "testing" + "time" + + "github.com/odpf/meteor/plugins" + "github.com/odpf/meteor/plugins/extractors/caramlstore/internal/core" + internalmocks "github.com/odpf/meteor/plugins/extractors/caramlstore/internal/mocks" + "github.com/odpf/meteor/test/mocks" + testutils "github.com/odpf/meteor/test/utils" + "github.com/odpf/meteor/utils" + "github.com/pkg/errors" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/grpc/test/bufconn" +) + +const ( + bufSize = 1024 * 1024 + urnScope = "test-caramlstore" +) + +var ctx = context.Background() + +func TestInit(t *testing.T) { + t.Run("should return error if config is invalid", func(t *testing.T) { + extr := New(testutils.Logger, newGRPCClient()) + err := extr.Init(context.Background(), plugins.Config{ + URNScope: urnScope, + RawConfig: map[string]interface{}{}, + }) + + assert.ErrorAs(t, err, &plugins.InvalidConfigError{}) + }) + + t.Run("should connect to caraml-store to check connection if config is valid", func(t *testing.T) { + hostURL := "caraml-store:80" + client := internalmocks.NewCaraMLClient(t) + client.EXPECT().Connect(testutils.OfTypeContext(), hostURL, 100, 30*time.Second). + Return(nil) + + extr := New(testutils.Logger, client) + err := extr.Init(ctx, plugins.Config{ + URNScope: urnScope, + RawConfig: map[string]interface{}{ + "url": hostURL, + "max_size_in_mb": 100, + "request_timeout": "30s", + }, + }) + assert.NoError(t, err) + }) + + t.Run("should return error if connect fails", func(t *testing.T) { + hostURL := "caraml-store:80" + client := internalmocks.NewCaraMLClient(t) + client.EXPECT().Connect(testutils.OfTypeContext(), hostURL, 100, 30*time.Second). + Return(errors.New("25 or 6 to 4")) + + extr := New(testutils.Logger, client) + err := extr.Init(ctx, plugins.Config{ + URNScope: urnScope, + RawConfig: map[string]interface{}{ + "url": hostURL, + "max_size_in_mb": 100, + "request_timeout": "30s", + }, + }) + assert.Error(t, err) + }) +} + +func TestExtract(t *testing.T) { + cases := []struct { + err error + expected codes.Code + isRetryErr bool + }{ + { + err: status.Error(codes.NotFound, "SBI employees"), + expected: codes.NotFound, + isRetryErr: false, + }, + { + err: errors.New("By the power of Grayskull.."), + expected: codes.Unknown, + isRetryErr: false, + }, + { + err: status.Error(codes.Canceled, "Right Place Wrong Time"), + expected: codes.Canceled, + isRetryErr: true, + }, + { + err: status.Error(codes.DeadlineExceeded, "Welcome to the machine"), + expected: codes.DeadlineExceeded, + isRetryErr: true, + }, + { + err: status.Error(codes.ResourceExhausted, "White room"), + expected: codes.ResourceExhausted, + isRetryErr: true, + }, + { + err: status.Error(codes.Internal, "Everything in its right place"), + expected: codes.Internal, + isRetryErr: true, + }, + { + err: status.Error(codes.Unavailable, "Sharp Dressed Man"), + expected: codes.Unavailable, + isRetryErr: true, + }, + } + for _, tc := range cases { + name := "ListProjectFailure/Code=" + utils.StatusCode(tc.err).String() + t.Run(name, func(t *testing.T) { + m, lis := newMockServer(t) + m.EXPECT().ListProjects(testutils.OfTypeContext(), &core.ListProjectsRequest{}). + Return(nil, tc.err) + + extr := New(testutils.Logger, newBufGRPCClient(t, lis)) + require.NoError(t, extr.Init(ctx, plugins.Config{ + URNScope: urnScope, + RawConfig: map[string]interface{}{ + "url": lis.Addr().String(), + }, + })) + + err := extr.Extract(ctx, mocks.NewEmitter().Push) + assert.Error(t, err) + assert.Equal(t, tc.expected, utils.StatusCode(err)) + assert.Equal(t, tc.isRetryErr, errors.As(err, &plugins.RetryError{})) + }) + } + + t.Run("it should tolerate entity, feature table fetch failures", func(t *testing.T) { + m, lis := newMockServer(t) + m.EXPECT().ListProjects(testutils.OfTypeContext(), &core.ListProjectsRequest{}). + Return(&core.ListProjectsResponse{Projects: []string{"odokawa", "gouriki", "dobu"}}, nil) + + // Failed to fetch entities, should not attempt to fetch feature tables + m.EXPECT().ListEntities(testutils.OfTypeContext(), &core.ListEntitiesRequest{ + Filter: &core.ListEntitiesRequest_Filter{Project: "odokawa"}, + }).Return(nil, status.Error(codes.Internal, "odd taxi")) + + // Fetched entities but failed to fetch table features + m.EXPECT().ListEntities(testutils.OfTypeContext(), &core.ListEntitiesRequest{ + Filter: &core.ListEntitiesRequest_Filter{Project: "gouriki"}, + }).Return(&core.ListEntitiesResponse{}, nil) + m.EXPECT().ListFeatureTables(testutils.OfTypeContext(), &core.ListFeatureTablesRequest{ + Filter: &core.ListFeatureTablesRequest_Filter{Project: "gouriki"}, + }).Return(nil, status.Error(codes.Internal, "nani!")) + + // Fetched entities but not the ones that are in the feature tables, + // should drop records and continue + m.EXPECT().ListEntities(testutils.OfTypeContext(), &core.ListEntitiesRequest{ + Filter: &core.ListEntitiesRequest_Filter{Project: "dobu"}, + }).Return(&core.ListEntitiesResponse{}, nil) + var featureTablesResp core.ListFeatureTablesResponse + testutils.LoadJSONIntoProto(t, "testdata/mocked-feature-tables-sauron.json", &featureTablesResp) + m.EXPECT().ListFeatureTables(testutils.OfTypeContext(), &core.ListFeatureTablesRequest{ + Filter: &core.ListFeatureTablesRequest_Filter{Project: "dobu"}, + }).Return(&featureTablesResp, nil) + + extr := New(testutils.Logger, newBufGRPCClient(t, lis)) + require.NoError(t, extr.Init(ctx, plugins.Config{ + URNScope: urnScope, + RawConfig: map[string]interface{}{ + "url": lis.Addr().String(), + }, + })) + + emitter := mocks.NewEmitter() + err := extr.Extract(ctx, emitter.Push) + assert.NoError(t, err) + + actual := emitter.GetAllData() + assert.Empty(t, actual) + }) + + t.Run("should build feature tables from caraml-store", func(t *testing.T) { + mockServer, lis := newMockServer(t) + + mockServer.EXPECT().ListProjects(testutils.OfTypeContext(), &core.ListProjectsRequest{}). + Return( + &core.ListProjectsResponse{Projects: []string{"sauron", "food-tensoba"}}, nil, + ) + + var entitiesResp core.ListEntitiesResponse + testutils.LoadJSONIntoProto(t, "testdata/mocked-entities-sauron.json", &entitiesResp) + mockServer.EXPECT().ListEntities(testutils.OfTypeContext(), &core.ListEntitiesRequest{ + Filter: &core.ListEntitiesRequest_Filter{Project: "sauron"}, + }).Return(&entitiesResp, nil) + + var featureTablesResp core.ListFeatureTablesResponse + testutils.LoadJSONIntoProto(t, "testdata/mocked-feature-tables-sauron.json", &featureTablesResp) + mockServer.EXPECT().ListFeatureTables(testutils.OfTypeContext(), &core.ListFeatureTablesRequest{ + Filter: &core.ListFeatureTablesRequest_Filter{Project: "sauron"}, + }).Return(&featureTablesResp, nil) + + testutils.LoadJSONIntoProto(t, "testdata/mocked-entities-food-tensoba.json", &entitiesResp) + mockServer.EXPECT().ListEntities(testutils.OfTypeContext(), &core.ListEntitiesRequest{ + Filter: &core.ListEntitiesRequest_Filter{Project: "food-tensoba"}, + }).Return(&entitiesResp, nil) + + testutils.LoadJSONIntoProto(t, "testdata/mocked-feature-tables-food-tensoba.json", &featureTablesResp) + mockServer.EXPECT().ListFeatureTables(testutils.OfTypeContext(), &core.ListFeatureTablesRequest{ + Filter: &core.ListFeatureTablesRequest_Filter{Project: "food-tensoba"}, + }).Return(&featureTablesResp, nil) + + extr := New(testutils.Logger, newBufGRPCClient(t, lis)) + require.NoError(t, extr.Init(ctx, plugins.Config{ + URNScope: urnScope, + RawConfig: map[string]interface{}{ + "url": lis.Addr().String(), + }, + })) + + emitter := mocks.NewEmitter() + err := extr.Extract(ctx, emitter.Push) + assert.NoError(t, err) + + actual := emitter.GetAllData() + testutils.AssertProtosWithJSONFile(t, "testdata/expected-assets.json", actual) + }) +} + +func newMockServer(t *testing.T) (*internalmocks.CoreServer, *bufconn.Listener) { + t.Helper() + + s := grpc.NewServer() + mockServer := internalmocks.NewCoreServer(t) + core.RegisterCoreServiceServer(s, mockServer) + + lis := bufconn.Listen(bufSize) + go func() { + if err := s.Serve(lis); err != nil { + t.Error("Serve mock caraml store core server", err) + } + }() + + t.Cleanup(func() { + s.Stop() + _ = lis.Close() + }) + + return mockServer, lis +} + +func newBufGRPCClient(t *testing.T, lis *bufconn.Listener) *gRPCClient { + t.Helper() + + return newGRPCClient(grpc.WithContextDialer( + func(ctx context.Context, _ string) (net.Conn, error) { + return lis.DialContext(ctx) + }, + )) +} diff --git a/plugins/extractors/caramlstore/internal/core/CoreService.pb.go b/plugins/extractors/caramlstore/internal/core/CoreService.pb.go new file mode 100644 index 000000000..6077de43c --- /dev/null +++ b/plugins/extractors/caramlstore/internal/core/CoreService.pb.go @@ -0,0 +1,2719 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: feast/core/CoreService.proto + +package core + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type GetOnlineStoreResponse_Status int32 + +const ( + // Requested online store is active + GetOnlineStoreResponse_ACTIVE GetOnlineStoreResponse_Status = 0 + // Requested online store is archived + GetOnlineStoreResponse_ARCHIVED GetOnlineStoreResponse_Status = 1 +) + +// Enum value maps for GetOnlineStoreResponse_Status. +var ( + GetOnlineStoreResponse_Status_name = map[int32]string{ + 0: "ACTIVE", + 1: "ARCHIVED", + } + GetOnlineStoreResponse_Status_value = map[string]int32{ + "ACTIVE": 0, + "ARCHIVED": 1, + } +) + +func (x GetOnlineStoreResponse_Status) Enum() *GetOnlineStoreResponse_Status { + p := new(GetOnlineStoreResponse_Status) + *p = x + return p +} + +func (x GetOnlineStoreResponse_Status) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GetOnlineStoreResponse_Status) Descriptor() protoreflect.EnumDescriptor { + return file_feast_core_CoreService_proto_enumTypes[0].Descriptor() +} + +func (GetOnlineStoreResponse_Status) Type() protoreflect.EnumType { + return &file_feast_core_CoreService_proto_enumTypes[0] +} + +func (x GetOnlineStoreResponse_Status) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GetOnlineStoreResponse_Status.Descriptor instead. +func (GetOnlineStoreResponse_Status) EnumDescriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{27, 0} +} + +type RegisterOnlineStoreResponse_Status int32 + +const ( + // Existing store properties matching the given online store is identical to the given request + RegisterOnlineStoreResponse_NO_CHANGE RegisterOnlineStoreResponse_Status = 0 + // New online store created or existing properties updated. + RegisterOnlineStoreResponse_REGISTERED RegisterOnlineStoreResponse_Status = 1 + // Existing online store updated. + RegisterOnlineStoreResponse_UPDATED RegisterOnlineStoreResponse_Status = 2 +) + +// Enum value maps for RegisterOnlineStoreResponse_Status. +var ( + RegisterOnlineStoreResponse_Status_name = map[int32]string{ + 0: "NO_CHANGE", + 1: "REGISTERED", + 2: "UPDATED", + } + RegisterOnlineStoreResponse_Status_value = map[string]int32{ + "NO_CHANGE": 0, + "REGISTERED": 1, + "UPDATED": 2, + } +) + +func (x RegisterOnlineStoreResponse_Status) Enum() *RegisterOnlineStoreResponse_Status { + p := new(RegisterOnlineStoreResponse_Status) + *p = x + return p +} + +func (x RegisterOnlineStoreResponse_Status) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RegisterOnlineStoreResponse_Status) Descriptor() protoreflect.EnumDescriptor { + return file_feast_core_CoreService_proto_enumTypes[1].Descriptor() +} + +func (RegisterOnlineStoreResponse_Status) Type() protoreflect.EnumType { + return &file_feast_core_CoreService_proto_enumTypes[1] +} + +func (x RegisterOnlineStoreResponse_Status) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RegisterOnlineStoreResponse_Status.Descriptor instead. +func (RegisterOnlineStoreResponse_Status) EnumDescriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{29, 0} +} + +// Request for a single entity +type GetEntityRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of entity (required). + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Name of project the entity belongs to. If omitted will default to 'default' project. + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` +} + +func (x *GetEntityRequest) Reset() { + *x = GetEntityRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetEntityRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetEntityRequest) ProtoMessage() {} + +func (x *GetEntityRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetEntityRequest.ProtoReflect.Descriptor instead. +func (*GetEntityRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{0} +} + +func (x *GetEntityRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetEntityRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +// Response containing a single entity +type GetEntityResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Entity *Entity `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` +} + +func (x *GetEntityResponse) Reset() { + *x = GetEntityResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetEntityResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetEntityResponse) ProtoMessage() {} + +func (x *GetEntityResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetEntityResponse.ProtoReflect.Descriptor instead. +func (*GetEntityResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{1} +} + +func (x *GetEntityResponse) GetEntity() *Entity { + if x != nil { + return x.Entity + } + return nil +} + +// Retrieves details for all versions of a specific entity +type ListEntitiesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Filter *ListEntitiesRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` +} + +func (x *ListEntitiesRequest) Reset() { + *x = ListEntitiesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListEntitiesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListEntitiesRequest) ProtoMessage() {} + +func (x *ListEntitiesRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListEntitiesRequest.ProtoReflect.Descriptor instead. +func (*ListEntitiesRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{2} +} + +func (x *ListEntitiesRequest) GetFilter() *ListEntitiesRequest_Filter { + if x != nil { + return x.Filter + } + return nil +} + +type ListEntitiesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` +} + +func (x *ListEntitiesResponse) Reset() { + *x = ListEntitiesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListEntitiesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListEntitiesResponse) ProtoMessage() {} + +func (x *ListEntitiesResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListEntitiesResponse.ProtoReflect.Descriptor instead. +func (*ListEntitiesResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{3} +} + +func (x *ListEntitiesResponse) GetEntities() []*Entity { + if x != nil { + return x.Entities + } + return nil +} + +type ListFeaturesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Filter *ListFeaturesRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` +} + +func (x *ListFeaturesRequest) Reset() { + *x = ListFeaturesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListFeaturesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListFeaturesRequest) ProtoMessage() {} + +func (x *ListFeaturesRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListFeaturesRequest.ProtoReflect.Descriptor instead. +func (*ListFeaturesRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{4} +} + +func (x *ListFeaturesRequest) GetFilter() *ListFeaturesRequest_Filter { + if x != nil { + return x.Filter + } + return nil +} + +type ListFeaturesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Features map[string]*FeatureSpec `protobuf:"bytes,2,rep,name=features,proto3" json:"features,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ListFeaturesResponse) Reset() { + *x = ListFeaturesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListFeaturesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListFeaturesResponse) ProtoMessage() {} + +func (x *ListFeaturesResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListFeaturesResponse.ProtoReflect.Descriptor instead. +func (*ListFeaturesResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{5} +} + +func (x *ListFeaturesResponse) GetFeatures() map[string]*FeatureSpec { + if x != nil { + return x.Features + } + return nil +} + +type ApplyEntityRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // If project is unspecified, will default to 'default' project. + // If project specified does not exist, the project would be automatically created. + Spec *EntitySpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + // Name of project that this entity belongs to. + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` +} + +func (x *ApplyEntityRequest) Reset() { + *x = ApplyEntityRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplyEntityRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplyEntityRequest) ProtoMessage() {} + +func (x *ApplyEntityRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplyEntityRequest.ProtoReflect.Descriptor instead. +func (*ApplyEntityRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{6} +} + +func (x *ApplyEntityRequest) GetSpec() *EntitySpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *ApplyEntityRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +type ApplyEntityResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Entity *Entity `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` +} + +func (x *ApplyEntityResponse) Reset() { + *x = ApplyEntityResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplyEntityResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplyEntityResponse) ProtoMessage() {} + +func (x *ApplyEntityResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplyEntityResponse.ProtoReflect.Descriptor instead. +func (*ApplyEntityResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{7} +} + +func (x *ApplyEntityResponse) GetEntity() *Entity { + if x != nil { + return x.Entity + } + return nil +} + +type GetFeastCoreVersionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *GetFeastCoreVersionRequest) Reset() { + *x = GetFeastCoreVersionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetFeastCoreVersionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetFeastCoreVersionRequest) ProtoMessage() {} + +func (x *GetFeastCoreVersionRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetFeastCoreVersionRequest.ProtoReflect.Descriptor instead. +func (*GetFeastCoreVersionRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{8} +} + +type GetFeastCoreVersionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *GetFeastCoreVersionResponse) Reset() { + *x = GetFeastCoreVersionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetFeastCoreVersionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetFeastCoreVersionResponse) ProtoMessage() {} + +func (x *GetFeastCoreVersionResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetFeastCoreVersionResponse.ProtoReflect.Descriptor instead. +func (*GetFeastCoreVersionResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{9} +} + +func (x *GetFeastCoreVersionResponse) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +// Request to create a project +type CreateProjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of project (required) + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *CreateProjectRequest) Reset() { + *x = CreateProjectRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateProjectRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateProjectRequest) ProtoMessage() {} + +func (x *CreateProjectRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateProjectRequest.ProtoReflect.Descriptor instead. +func (*CreateProjectRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{10} +} + +func (x *CreateProjectRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// Response for creation of a project +type CreateProjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CreateProjectResponse) Reset() { + *x = CreateProjectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateProjectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateProjectResponse) ProtoMessage() {} + +func (x *CreateProjectResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateProjectResponse.ProtoReflect.Descriptor instead. +func (*CreateProjectResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{11} +} + +// Request for the archival of a project +type ArchiveProjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of project to be archived + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *ArchiveProjectRequest) Reset() { + *x = ArchiveProjectRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ArchiveProjectRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ArchiveProjectRequest) ProtoMessage() {} + +func (x *ArchiveProjectRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ArchiveProjectRequest.ProtoReflect.Descriptor instead. +func (*ArchiveProjectRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{12} +} + +func (x *ArchiveProjectRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// Response for archival of a project +type ArchiveProjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ArchiveProjectResponse) Reset() { + *x = ArchiveProjectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ArchiveProjectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ArchiveProjectResponse) ProtoMessage() {} + +func (x *ArchiveProjectResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ArchiveProjectResponse.ProtoReflect.Descriptor instead. +func (*ArchiveProjectResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{13} +} + +// Request for listing of projects +type ListProjectsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ListProjectsRequest) Reset() { + *x = ListProjectsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListProjectsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListProjectsRequest) ProtoMessage() {} + +func (x *ListProjectsRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListProjectsRequest.ProtoReflect.Descriptor instead. +func (*ListProjectsRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{14} +} + +// Response for listing of projects +type ListProjectsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of project names (archived projects are filtered out) + Projects []string `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects,omitempty"` +} + +func (x *ListProjectsResponse) Reset() { + *x = ListProjectsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListProjectsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListProjectsResponse) ProtoMessage() {} + +func (x *ListProjectsResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListProjectsResponse.ProtoReflect.Descriptor instead. +func (*ListProjectsResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{15} +} + +func (x *ListProjectsResponse) GetProjects() []string { + if x != nil { + return x.Projects + } + return nil +} + +type ApplyFeatureTableRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional. Name of the Project to apply the Feature Table to. + // If unspecified, will apply FeatureTable to the default project. + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + // Feature Table specification to apply + TableSpec *FeatureTableSpec `protobuf:"bytes,2,opt,name=table_spec,json=tableSpec,proto3" json:"table_spec,omitempty"` +} + +func (x *ApplyFeatureTableRequest) Reset() { + *x = ApplyFeatureTableRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplyFeatureTableRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplyFeatureTableRequest) ProtoMessage() {} + +func (x *ApplyFeatureTableRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplyFeatureTableRequest.ProtoReflect.Descriptor instead. +func (*ApplyFeatureTableRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{16} +} + +func (x *ApplyFeatureTableRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *ApplyFeatureTableRequest) GetTableSpec() *FeatureTableSpec { + if x != nil { + return x.TableSpec + } + return nil +} + +type ApplyFeatureTableResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Table *FeatureTable `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"` +} + +func (x *ApplyFeatureTableResponse) Reset() { + *x = ApplyFeatureTableResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplyFeatureTableResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplyFeatureTableResponse) ProtoMessage() {} + +func (x *ApplyFeatureTableResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplyFeatureTableResponse.ProtoReflect.Descriptor instead. +func (*ApplyFeatureTableResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{17} +} + +func (x *ApplyFeatureTableResponse) GetTable() *FeatureTable { + if x != nil { + return x.Table + } + return nil +} + +type GetFeatureTableRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional. Name of the Project to retrieve the Feature Table from. + // If unspecified, will apply FeatureTable to the default project. + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + // Name of the FeatureTable to retrieve. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *GetFeatureTableRequest) Reset() { + *x = GetFeatureTableRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetFeatureTableRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetFeatureTableRequest) ProtoMessage() {} + +func (x *GetFeatureTableRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetFeatureTableRequest.ProtoReflect.Descriptor instead. +func (*GetFeatureTableRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{18} +} + +func (x *GetFeatureTableRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *GetFeatureTableRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type GetFeatureTableResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Feature Table retrieved. + Table *FeatureTable `protobuf:"bytes,1,opt,name=table,proto3" json:"table,omitempty"` +} + +func (x *GetFeatureTableResponse) Reset() { + *x = GetFeatureTableResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetFeatureTableResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetFeatureTableResponse) ProtoMessage() {} + +func (x *GetFeatureTableResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetFeatureTableResponse.ProtoReflect.Descriptor instead. +func (*GetFeatureTableResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{19} +} + +func (x *GetFeatureTableResponse) GetTable() *FeatureTable { + if x != nil { + return x.Table + } + return nil +} + +type ListFeatureTablesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Filter used when listing Feature Tables + Filter *ListFeatureTablesRequest_Filter `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` +} + +func (x *ListFeatureTablesRequest) Reset() { + *x = ListFeatureTablesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListFeatureTablesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListFeatureTablesRequest) ProtoMessage() {} + +func (x *ListFeatureTablesRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListFeatureTablesRequest.ProtoReflect.Descriptor instead. +func (*ListFeatureTablesRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{20} +} + +func (x *ListFeatureTablesRequest) GetFilter() *ListFeatureTablesRequest_Filter { + if x != nil { + return x.Filter + } + return nil +} + +type ListFeatureTablesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of matching Feature Tables + Tables []*FeatureTable `protobuf:"bytes,1,rep,name=tables,proto3" json:"tables,omitempty"` +} + +func (x *ListFeatureTablesResponse) Reset() { + *x = ListFeatureTablesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListFeatureTablesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListFeatureTablesResponse) ProtoMessage() {} + +func (x *ListFeatureTablesResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListFeatureTablesResponse.ProtoReflect.Descriptor instead. +func (*ListFeatureTablesResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{21} +} + +func (x *ListFeatureTablesResponse) GetTables() []*FeatureTable { + if x != nil { + return x.Tables + } + return nil +} + +type DeleteFeatureTableRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional. Name of the Project to delete the Feature Table from. + // If unspecified, will delete FeatureTable from the default project. + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + // Name of the FeatureTable to delete. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *DeleteFeatureTableRequest) Reset() { + *x = DeleteFeatureTableRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteFeatureTableRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteFeatureTableRequest) ProtoMessage() {} + +func (x *DeleteFeatureTableRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteFeatureTableRequest.ProtoReflect.Descriptor instead. +func (*DeleteFeatureTableRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{22} +} + +func (x *DeleteFeatureTableRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *DeleteFeatureTableRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type DeleteFeatureTableResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DeleteFeatureTableResponse) Reset() { + *x = DeleteFeatureTableResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteFeatureTableResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteFeatureTableResponse) ProtoMessage() {} + +func (x *DeleteFeatureTableResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteFeatureTableResponse.ProtoReflect.Descriptor instead. +func (*DeleteFeatureTableResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{23} +} + +type ListOnlineStoresRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ListOnlineStoresRequest) Reset() { + *x = ListOnlineStoresRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListOnlineStoresRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListOnlineStoresRequest) ProtoMessage() {} + +func (x *ListOnlineStoresRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListOnlineStoresRequest.ProtoReflect.Descriptor instead. +func (*ListOnlineStoresRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{24} +} + +type ListOnlineStoresResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OnlineStore []*OnlineStore `protobuf:"bytes,1,rep,name=online_store,json=onlineStore,proto3" json:"online_store,omitempty"` +} + +func (x *ListOnlineStoresResponse) Reset() { + *x = ListOnlineStoresResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListOnlineStoresResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListOnlineStoresResponse) ProtoMessage() {} + +func (x *ListOnlineStoresResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListOnlineStoresResponse.ProtoReflect.Descriptor instead. +func (*ListOnlineStoresResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{25} +} + +func (x *ListOnlineStoresResponse) GetOnlineStore() []*OnlineStore { + if x != nil { + return x.OnlineStore + } + return nil +} + +type GetOnlineStoreRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *GetOnlineStoreRequest) Reset() { + *x = GetOnlineStoreRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetOnlineStoreRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetOnlineStoreRequest) ProtoMessage() {} + +func (x *GetOnlineStoreRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetOnlineStoreRequest.ProtoReflect.Descriptor instead. +func (*GetOnlineStoreRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{26} +} + +func (x *GetOnlineStoreRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type GetOnlineStoreResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OnlineStore *OnlineStore `protobuf:"bytes,1,opt,name=online_store,json=onlineStore,proto3" json:"online_store,omitempty"` + Status GetOnlineStoreResponse_Status `protobuf:"varint,2,opt,name=status,proto3,enum=feast.core.GetOnlineStoreResponse_Status" json:"status,omitempty"` +} + +func (x *GetOnlineStoreResponse) Reset() { + *x = GetOnlineStoreResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetOnlineStoreResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetOnlineStoreResponse) ProtoMessage() {} + +func (x *GetOnlineStoreResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetOnlineStoreResponse.ProtoReflect.Descriptor instead. +func (*GetOnlineStoreResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{27} +} + +func (x *GetOnlineStoreResponse) GetOnlineStore() *OnlineStore { + if x != nil { + return x.OnlineStore + } + return nil +} + +func (x *GetOnlineStoreResponse) GetStatus() GetOnlineStoreResponse_Status { + if x != nil { + return x.Status + } + return GetOnlineStoreResponse_ACTIVE +} + +type RegisterOnlineStoreRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OnlineStore *OnlineStore `protobuf:"bytes,1,opt,name=online_store,json=onlineStore,proto3" json:"online_store,omitempty"` +} + +func (x *RegisterOnlineStoreRequest) Reset() { + *x = RegisterOnlineStoreRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegisterOnlineStoreRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegisterOnlineStoreRequest) ProtoMessage() {} + +func (x *RegisterOnlineStoreRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RegisterOnlineStoreRequest.ProtoReflect.Descriptor instead. +func (*RegisterOnlineStoreRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{28} +} + +func (x *RegisterOnlineStoreRequest) GetOnlineStore() *OnlineStore { + if x != nil { + return x.OnlineStore + } + return nil +} + +type RegisterOnlineStoreResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OnlineStore *OnlineStore `protobuf:"bytes,1,opt,name=online_store,json=onlineStore,proto3" json:"online_store,omitempty"` + Status RegisterOnlineStoreResponse_Status `protobuf:"varint,2,opt,name=status,proto3,enum=feast.core.RegisterOnlineStoreResponse_Status" json:"status,omitempty"` +} + +func (x *RegisterOnlineStoreResponse) Reset() { + *x = RegisterOnlineStoreResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegisterOnlineStoreResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegisterOnlineStoreResponse) ProtoMessage() {} + +func (x *RegisterOnlineStoreResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RegisterOnlineStoreResponse.ProtoReflect.Descriptor instead. +func (*RegisterOnlineStoreResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{29} +} + +func (x *RegisterOnlineStoreResponse) GetOnlineStore() *OnlineStore { + if x != nil { + return x.OnlineStore + } + return nil +} + +func (x *RegisterOnlineStoreResponse) GetStatus() RegisterOnlineStoreResponse_Status { + if x != nil { + return x.Status + } + return RegisterOnlineStoreResponse_NO_CHANGE +} + +// Request for the archival of an online store +type ArchiveOnlineStoreRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of online store to be archived + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *ArchiveOnlineStoreRequest) Reset() { + *x = ArchiveOnlineStoreRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ArchiveOnlineStoreRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ArchiveOnlineStoreRequest) ProtoMessage() {} + +func (x *ArchiveOnlineStoreRequest) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ArchiveOnlineStoreRequest.ProtoReflect.Descriptor instead. +func (*ArchiveOnlineStoreRequest) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{30} +} + +func (x *ArchiveOnlineStoreRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// Response for archival of an online store +type ArchiveOnlineStoreResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ArchiveOnlineStoreResponse) Reset() { + *x = ArchiveOnlineStoreResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ArchiveOnlineStoreResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ArchiveOnlineStoreResponse) ProtoMessage() {} + +func (x *ArchiveOnlineStoreResponse) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ArchiveOnlineStoreResponse.ProtoReflect.Descriptor instead. +func (*ArchiveOnlineStoreResponse) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{31} +} + +type ListEntitiesRequest_Filter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional. Specifies the name of the project to list Entities in. + // It is NOT possible to provide an asterisk with a string in order to do pattern matching. + // If unspecified, this field will default to the default project 'default'. + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + // Optional. User defined metadata for entity. + // Entities with all matching labels will be returned. + Labels map[string]string `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ListEntitiesRequest_Filter) Reset() { + *x = ListEntitiesRequest_Filter{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListEntitiesRequest_Filter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListEntitiesRequest_Filter) ProtoMessage() {} + +func (x *ListEntitiesRequest_Filter) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListEntitiesRequest_Filter.ProtoReflect.Descriptor instead. +func (*ListEntitiesRequest_Filter) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{2, 0} +} + +func (x *ListEntitiesRequest_Filter) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *ListEntitiesRequest_Filter) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +type ListFeaturesRequest_Filter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User defined metadata for feature. + // Features with all matching labels will be returned. + Labels map[string]string `protobuf:"bytes,1,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // List of entities contained within the featureSet that the feature belongs to. + // Only feature tables with these entities will be searched for features. + Entities []string `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"` + // Name of project that the feature tables belongs to. Filtering on projects is disabled. + // It is NOT possible to provide an asterisk with a string in order to do pattern matching. + // If unspecified this field will default to the default project 'default'. + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` +} + +func (x *ListFeaturesRequest_Filter) Reset() { + *x = ListFeaturesRequest_Filter{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListFeaturesRequest_Filter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListFeaturesRequest_Filter) ProtoMessage() {} + +func (x *ListFeaturesRequest_Filter) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListFeaturesRequest_Filter.ProtoReflect.Descriptor instead. +func (*ListFeaturesRequest_Filter) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{4, 0} +} + +func (x *ListFeaturesRequest_Filter) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *ListFeaturesRequest_Filter) GetEntities() []string { + if x != nil { + return x.Entities + } + return nil +} + +func (x *ListFeaturesRequest_Filter) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +type ListFeatureTablesRequest_Filter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional. Specifies the name of the project to list Feature Tables in. + // If unspecified would list Feature Tables in the default project. + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + // Optional. Feature Tables with all matching labels will be returned. + // If unspecified would list Feature Tables without filtering by labels. + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ListFeatureTablesRequest_Filter) Reset() { + *x = ListFeatureTablesRequest_Filter{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_CoreService_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListFeatureTablesRequest_Filter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListFeatureTablesRequest_Filter) ProtoMessage() {} + +func (x *ListFeatureTablesRequest_Filter) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_CoreService_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListFeatureTablesRequest_Filter.ProtoReflect.Descriptor instead. +func (*ListFeatureTablesRequest_Filter) Descriptor() ([]byte, []int) { + return file_feast_core_CoreService_proto_rawDescGZIP(), []int{20, 0} +} + +func (x *ListFeatureTablesRequest_Filter) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *ListFeatureTablesRequest_Filter) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +var File_feast_core_CoreService_proto protoreflect.FileDescriptor + +var file_feast_core_CoreService_proto_rawDesc = []byte{ + 0x0a, 0x1c, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x43, 0x6f, 0x72, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, + 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x17, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x66, + 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x40, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x3f, 0x0a, 0x11, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x81, 0x02, + 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0xa9, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x4a, 0x0a, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x66, 0x65, 0x61, + 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x46, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x9d, 0x02, 0x0a, 0x13, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x1a, 0xc5, 0x01, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x66, + 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x1a, 0x39, + 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbe, 0x01, 0x0a, 0x14, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, 0x54, + 0x0a, 0x0d, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x5a, 0x0a, 0x12, 0x41, 0x70, + 0x70, 0x6c, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x41, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, + 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x1c, 0x0a, 0x1a, 0x47, 0x65, 0x74, + 0x46, 0x65, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x37, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x46, 0x65, + 0x61, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x2a, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x17, 0x0a, 0x15, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x0a, 0x15, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x0a, 0x13, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x32, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0x71, 0x0a, 0x18, 0x41, 0x70, 0x70, 0x6c, 0x79, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3b, 0x0a, + 0x0a, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x22, 0x4b, 0x0a, 0x19, 0x41, 0x70, + 0x70, 0x6c, 0x79, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x46, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x49, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x90, 0x02, 0x0a, 0x18, 0x4c, + 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0xae, 0x01, 0x0a, + 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x4f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x37, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4d, 0x0a, + 0x19, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x65, 0x61, + 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x49, 0x0a, 0x19, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x56, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0c, + 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x0b, 0x6f, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x2b, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4f, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xbb, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3a, 0x0a, 0x0c, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, + 0x0b, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x41, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x66, + 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, + 0x49, 0x56, 0x45, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, + 0x44, 0x10, 0x01, 0x22, 0x58, 0x0a, 0x1a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3a, 0x0a, 0x0c, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x52, 0x0b, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x22, 0xd7, 0x01, + 0x0a, 0x1b, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, + 0x0c, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x0b, 0x6f, 0x6e, + 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x22, 0x34, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0d, 0x0a, 0x09, 0x4e, + 0x4f, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, + 0x47, 0x49, 0x53, 0x54, 0x45, 0x52, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x22, 0x2f, 0x0a, 0x19, 0x41, 0x72, 0x63, 0x68, 0x69, + 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x41, 0x72, 0x63, 0x68, + 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc1, 0x0b, 0x0a, 0x0b, 0x43, 0x6f, 0x72, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, + 0x73, 0x74, 0x43, 0x6f, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, + 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, + 0x61, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x72, 0x65, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, + 0x0a, 0x09, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1c, 0x2e, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0b, 0x41, + 0x70, 0x70, 0x6c, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1e, 0x2e, 0x66, 0x65, 0x61, + 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x66, 0x65, 0x61, + 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0c, 0x4c, + 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x66, + 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, + 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x20, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x21, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, + 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, + 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x60, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x24, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x46, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x60, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, + 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x22, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x63, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x25, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, + 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, + 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x21, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, + 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x12, 0x26, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x66, + 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x12, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x25, 0x2e, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, + 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xbb, 0x01, 0x0a, 0x0e, 0x63, + 0x6f, 0x6d, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x42, 0x10, 0x43, + 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x4e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, + 0x70, 0x66, 0x2f, 0x6d, 0x65, 0x74, 0x65, 0x6f, 0x72, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x73, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x63, 0x61, 0x72, + 0x61, 0x6d, 0x6c, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, + 0x65, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x0a, 0x46, 0x65, 0x61, 0x73, 0x74, 0x2e, + 0x43, 0x6f, 0x72, 0x65, 0xca, 0x02, 0x0a, 0x46, 0x65, 0x61, 0x73, 0x74, 0x5c, 0x43, 0x6f, 0x72, + 0x65, 0xe2, 0x02, 0x16, 0x46, 0x65, 0x61, 0x73, 0x74, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0b, 0x46, 0x65, 0x61, + 0x73, 0x74, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_feast_core_CoreService_proto_rawDescOnce sync.Once + file_feast_core_CoreService_proto_rawDescData = file_feast_core_CoreService_proto_rawDesc +) + +func file_feast_core_CoreService_proto_rawDescGZIP() []byte { + file_feast_core_CoreService_proto_rawDescOnce.Do(func() { + file_feast_core_CoreService_proto_rawDescData = protoimpl.X.CompressGZIP(file_feast_core_CoreService_proto_rawDescData) + }) + return file_feast_core_CoreService_proto_rawDescData +} + +var file_feast_core_CoreService_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_feast_core_CoreService_proto_msgTypes = make([]protoimpl.MessageInfo, 39) +var file_feast_core_CoreService_proto_goTypes = []interface{}{ + (GetOnlineStoreResponse_Status)(0), // 0: feast.core.GetOnlineStoreResponse.Status + (RegisterOnlineStoreResponse_Status)(0), // 1: feast.core.RegisterOnlineStoreResponse.Status + (*GetEntityRequest)(nil), // 2: feast.core.GetEntityRequest + (*GetEntityResponse)(nil), // 3: feast.core.GetEntityResponse + (*ListEntitiesRequest)(nil), // 4: feast.core.ListEntitiesRequest + (*ListEntitiesResponse)(nil), // 5: feast.core.ListEntitiesResponse + (*ListFeaturesRequest)(nil), // 6: feast.core.ListFeaturesRequest + (*ListFeaturesResponse)(nil), // 7: feast.core.ListFeaturesResponse + (*ApplyEntityRequest)(nil), // 8: feast.core.ApplyEntityRequest + (*ApplyEntityResponse)(nil), // 9: feast.core.ApplyEntityResponse + (*GetFeastCoreVersionRequest)(nil), // 10: feast.core.GetFeastCoreVersionRequest + (*GetFeastCoreVersionResponse)(nil), // 11: feast.core.GetFeastCoreVersionResponse + (*CreateProjectRequest)(nil), // 12: feast.core.CreateProjectRequest + (*CreateProjectResponse)(nil), // 13: feast.core.CreateProjectResponse + (*ArchiveProjectRequest)(nil), // 14: feast.core.ArchiveProjectRequest + (*ArchiveProjectResponse)(nil), // 15: feast.core.ArchiveProjectResponse + (*ListProjectsRequest)(nil), // 16: feast.core.ListProjectsRequest + (*ListProjectsResponse)(nil), // 17: feast.core.ListProjectsResponse + (*ApplyFeatureTableRequest)(nil), // 18: feast.core.ApplyFeatureTableRequest + (*ApplyFeatureTableResponse)(nil), // 19: feast.core.ApplyFeatureTableResponse + (*GetFeatureTableRequest)(nil), // 20: feast.core.GetFeatureTableRequest + (*GetFeatureTableResponse)(nil), // 21: feast.core.GetFeatureTableResponse + (*ListFeatureTablesRequest)(nil), // 22: feast.core.ListFeatureTablesRequest + (*ListFeatureTablesResponse)(nil), // 23: feast.core.ListFeatureTablesResponse + (*DeleteFeatureTableRequest)(nil), // 24: feast.core.DeleteFeatureTableRequest + (*DeleteFeatureTableResponse)(nil), // 25: feast.core.DeleteFeatureTableResponse + (*ListOnlineStoresRequest)(nil), // 26: feast.core.ListOnlineStoresRequest + (*ListOnlineStoresResponse)(nil), // 27: feast.core.ListOnlineStoresResponse + (*GetOnlineStoreRequest)(nil), // 28: feast.core.GetOnlineStoreRequest + (*GetOnlineStoreResponse)(nil), // 29: feast.core.GetOnlineStoreResponse + (*RegisterOnlineStoreRequest)(nil), // 30: feast.core.RegisterOnlineStoreRequest + (*RegisterOnlineStoreResponse)(nil), // 31: feast.core.RegisterOnlineStoreResponse + (*ArchiveOnlineStoreRequest)(nil), // 32: feast.core.ArchiveOnlineStoreRequest + (*ArchiveOnlineStoreResponse)(nil), // 33: feast.core.ArchiveOnlineStoreResponse + (*ListEntitiesRequest_Filter)(nil), // 34: feast.core.ListEntitiesRequest.Filter + nil, // 35: feast.core.ListEntitiesRequest.Filter.LabelsEntry + (*ListFeaturesRequest_Filter)(nil), // 36: feast.core.ListFeaturesRequest.Filter + nil, // 37: feast.core.ListFeaturesRequest.Filter.LabelsEntry + nil, // 38: feast.core.ListFeaturesResponse.FeaturesEntry + (*ListFeatureTablesRequest_Filter)(nil), // 39: feast.core.ListFeatureTablesRequest.Filter + nil, // 40: feast.core.ListFeatureTablesRequest.Filter.LabelsEntry + (*Entity)(nil), // 41: feast.core.Entity + (*EntitySpec)(nil), // 42: feast.core.EntitySpec + (*FeatureTableSpec)(nil), // 43: feast.core.FeatureTableSpec + (*FeatureTable)(nil), // 44: feast.core.FeatureTable + (*OnlineStore)(nil), // 45: feast.core.OnlineStore + (*FeatureSpec)(nil), // 46: feast.core.FeatureSpec +} +var file_feast_core_CoreService_proto_depIdxs = []int32{ + 41, // 0: feast.core.GetEntityResponse.entity:type_name -> feast.core.Entity + 34, // 1: feast.core.ListEntitiesRequest.filter:type_name -> feast.core.ListEntitiesRequest.Filter + 41, // 2: feast.core.ListEntitiesResponse.entities:type_name -> feast.core.Entity + 36, // 3: feast.core.ListFeaturesRequest.filter:type_name -> feast.core.ListFeaturesRequest.Filter + 38, // 4: feast.core.ListFeaturesResponse.features:type_name -> feast.core.ListFeaturesResponse.FeaturesEntry + 42, // 5: feast.core.ApplyEntityRequest.spec:type_name -> feast.core.EntitySpec + 41, // 6: feast.core.ApplyEntityResponse.entity:type_name -> feast.core.Entity + 43, // 7: feast.core.ApplyFeatureTableRequest.table_spec:type_name -> feast.core.FeatureTableSpec + 44, // 8: feast.core.ApplyFeatureTableResponse.table:type_name -> feast.core.FeatureTable + 44, // 9: feast.core.GetFeatureTableResponse.table:type_name -> feast.core.FeatureTable + 39, // 10: feast.core.ListFeatureTablesRequest.filter:type_name -> feast.core.ListFeatureTablesRequest.Filter + 44, // 11: feast.core.ListFeatureTablesResponse.tables:type_name -> feast.core.FeatureTable + 45, // 12: feast.core.ListOnlineStoresResponse.online_store:type_name -> feast.core.OnlineStore + 45, // 13: feast.core.GetOnlineStoreResponse.online_store:type_name -> feast.core.OnlineStore + 0, // 14: feast.core.GetOnlineStoreResponse.status:type_name -> feast.core.GetOnlineStoreResponse.Status + 45, // 15: feast.core.RegisterOnlineStoreRequest.online_store:type_name -> feast.core.OnlineStore + 45, // 16: feast.core.RegisterOnlineStoreResponse.online_store:type_name -> feast.core.OnlineStore + 1, // 17: feast.core.RegisterOnlineStoreResponse.status:type_name -> feast.core.RegisterOnlineStoreResponse.Status + 35, // 18: feast.core.ListEntitiesRequest.Filter.labels:type_name -> feast.core.ListEntitiesRequest.Filter.LabelsEntry + 37, // 19: feast.core.ListFeaturesRequest.Filter.labels:type_name -> feast.core.ListFeaturesRequest.Filter.LabelsEntry + 46, // 20: feast.core.ListFeaturesResponse.FeaturesEntry.value:type_name -> feast.core.FeatureSpec + 40, // 21: feast.core.ListFeatureTablesRequest.Filter.labels:type_name -> feast.core.ListFeatureTablesRequest.Filter.LabelsEntry + 10, // 22: feast.core.CoreService.GetFeastCoreVersion:input_type -> feast.core.GetFeastCoreVersionRequest + 2, // 23: feast.core.CoreService.GetEntity:input_type -> feast.core.GetEntityRequest + 6, // 24: feast.core.CoreService.ListFeatures:input_type -> feast.core.ListFeaturesRequest + 8, // 25: feast.core.CoreService.ApplyEntity:input_type -> feast.core.ApplyEntityRequest + 4, // 26: feast.core.CoreService.ListEntities:input_type -> feast.core.ListEntitiesRequest + 12, // 27: feast.core.CoreService.CreateProject:input_type -> feast.core.CreateProjectRequest + 14, // 28: feast.core.CoreService.ArchiveProject:input_type -> feast.core.ArchiveProjectRequest + 16, // 29: feast.core.CoreService.ListProjects:input_type -> feast.core.ListProjectsRequest + 18, // 30: feast.core.CoreService.ApplyFeatureTable:input_type -> feast.core.ApplyFeatureTableRequest + 22, // 31: feast.core.CoreService.ListFeatureTables:input_type -> feast.core.ListFeatureTablesRequest + 20, // 32: feast.core.CoreService.GetFeatureTable:input_type -> feast.core.GetFeatureTableRequest + 24, // 33: feast.core.CoreService.DeleteFeatureTable:input_type -> feast.core.DeleteFeatureTableRequest + 26, // 34: feast.core.CoreService.ListOnlineStores:input_type -> feast.core.ListOnlineStoresRequest + 28, // 35: feast.core.CoreService.GetOnlineStore:input_type -> feast.core.GetOnlineStoreRequest + 30, // 36: feast.core.CoreService.RegisterOnlineStore:input_type -> feast.core.RegisterOnlineStoreRequest + 32, // 37: feast.core.CoreService.ArchiveOnlineStore:input_type -> feast.core.ArchiveOnlineStoreRequest + 11, // 38: feast.core.CoreService.GetFeastCoreVersion:output_type -> feast.core.GetFeastCoreVersionResponse + 3, // 39: feast.core.CoreService.GetEntity:output_type -> feast.core.GetEntityResponse + 7, // 40: feast.core.CoreService.ListFeatures:output_type -> feast.core.ListFeaturesResponse + 9, // 41: feast.core.CoreService.ApplyEntity:output_type -> feast.core.ApplyEntityResponse + 5, // 42: feast.core.CoreService.ListEntities:output_type -> feast.core.ListEntitiesResponse + 13, // 43: feast.core.CoreService.CreateProject:output_type -> feast.core.CreateProjectResponse + 15, // 44: feast.core.CoreService.ArchiveProject:output_type -> feast.core.ArchiveProjectResponse + 17, // 45: feast.core.CoreService.ListProjects:output_type -> feast.core.ListProjectsResponse + 19, // 46: feast.core.CoreService.ApplyFeatureTable:output_type -> feast.core.ApplyFeatureTableResponse + 23, // 47: feast.core.CoreService.ListFeatureTables:output_type -> feast.core.ListFeatureTablesResponse + 21, // 48: feast.core.CoreService.GetFeatureTable:output_type -> feast.core.GetFeatureTableResponse + 25, // 49: feast.core.CoreService.DeleteFeatureTable:output_type -> feast.core.DeleteFeatureTableResponse + 27, // 50: feast.core.CoreService.ListOnlineStores:output_type -> feast.core.ListOnlineStoresResponse + 29, // 51: feast.core.CoreService.GetOnlineStore:output_type -> feast.core.GetOnlineStoreResponse + 31, // 52: feast.core.CoreService.RegisterOnlineStore:output_type -> feast.core.RegisterOnlineStoreResponse + 33, // 53: feast.core.CoreService.ArchiveOnlineStore:output_type -> feast.core.ArchiveOnlineStoreResponse + 38, // [38:54] is the sub-list for method output_type + 22, // [22:38] is the sub-list for method input_type + 22, // [22:22] is the sub-list for extension type_name + 22, // [22:22] is the sub-list for extension extendee + 0, // [0:22] is the sub-list for field type_name +} + +func init() { file_feast_core_CoreService_proto_init() } +func file_feast_core_CoreService_proto_init() { + if File_feast_core_CoreService_proto != nil { + return + } + file_feast_core_Entity_proto_init() + file_feast_core_Feature_proto_init() + file_feast_core_FeatureTable_proto_init() + file_feast_core_OnlineStore_proto_init() + if !protoimpl.UnsafeEnabled { + file_feast_core_CoreService_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetEntityRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetEntityResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListEntitiesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListEntitiesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListFeaturesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListFeaturesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplyEntityRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplyEntityResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetFeastCoreVersionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetFeastCoreVersionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateProjectRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateProjectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ArchiveProjectRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ArchiveProjectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListProjectsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListProjectsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplyFeatureTableRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplyFeatureTableResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetFeatureTableRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetFeatureTableResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListFeatureTablesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListFeatureTablesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFeatureTableRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFeatureTableResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListOnlineStoresRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListOnlineStoresResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetOnlineStoreRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetOnlineStoreResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegisterOnlineStoreRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegisterOnlineStoreResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ArchiveOnlineStoreRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ArchiveOnlineStoreResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListEntitiesRequest_Filter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListFeaturesRequest_Filter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_CoreService_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListFeatureTablesRequest_Filter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_feast_core_CoreService_proto_rawDesc, + NumEnums: 2, + NumMessages: 39, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_feast_core_CoreService_proto_goTypes, + DependencyIndexes: file_feast_core_CoreService_proto_depIdxs, + EnumInfos: file_feast_core_CoreService_proto_enumTypes, + MessageInfos: file_feast_core_CoreService_proto_msgTypes, + }.Build() + File_feast_core_CoreService_proto = out.File + file_feast_core_CoreService_proto_rawDesc = nil + file_feast_core_CoreService_proto_goTypes = nil + file_feast_core_CoreService_proto_depIdxs = nil +} diff --git a/plugins/extractors/caramlstore/internal/core/CoreService_grpc.pb.go b/plugins/extractors/caramlstore/internal/core/CoreService_grpc.pb.go new file mode 100644 index 000000000..d955b088e --- /dev/null +++ b/plugins/extractors/caramlstore/internal/core/CoreService_grpc.pb.go @@ -0,0 +1,731 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc (unknown) +// source: feast/core/CoreService.proto + +package core + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// CoreServiceClient is the client API for CoreService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type CoreServiceClient interface { + // Retrieve version information about this Feast deployment + GetFeastCoreVersion(ctx context.Context, in *GetFeastCoreVersionRequest, opts ...grpc.CallOption) (*GetFeastCoreVersionResponse, error) + // Returns a specific entity + GetEntity(ctx context.Context, in *GetEntityRequest, opts ...grpc.CallOption) (*GetEntityResponse, error) + // Returns all feature references and respective features matching that filter. If none are found + // an empty map will be returned + // If no filter is provided in the request, the response will contain all the features + // currently stored in the default project. + ListFeatures(ctx context.Context, in *ListFeaturesRequest, opts ...grpc.CallOption) (*ListFeaturesResponse, error) + // Create or update and existing entity. + // + // This function is idempotent - it will not create a new entity if schema does not change. + // Schema changes will update the entity if the changes are valid. + // Following changes are not valid: + // - Changes to name + // - Changes to type + ApplyEntity(ctx context.Context, in *ApplyEntityRequest, opts ...grpc.CallOption) (*ApplyEntityResponse, error) + // Returns all entity references and respective entities matching that filter. If none are found + // an empty map will be returned + // If no filter is provided in the request, the response will contain all the entities + // currently stored in the default project. + ListEntities(ctx context.Context, in *ListEntitiesRequest, opts ...grpc.CallOption) (*ListEntitiesResponse, error) + // Creates a project. Projects serve as namespaces within which resources like features will be + // created. Feature table names as must be unique within a project while field (Feature/Entity) names + // must be unique within a Feature Table. Project names themselves must be globally unique. + CreateProject(ctx context.Context, in *CreateProjectRequest, opts ...grpc.CallOption) (*CreateProjectResponse, error) + // Archives a project. Archived projects will continue to exist and function, but won't be visible + // through the Core API. Any existing ingestion or serving requests will continue to function, + // but will result in warning messages being logged. It is not possible to unarchive a project + // through the Core API + ArchiveProject(ctx context.Context, in *ArchiveProjectRequest, opts ...grpc.CallOption) (*ArchiveProjectResponse, error) + // Lists all projects active projects. + ListProjects(ctx context.Context, in *ListProjectsRequest, opts ...grpc.CallOption) (*ListProjectsResponse, error) + // Create or update an existing feature table. + // This function is idempotent - it will not create a new feature table if the schema does not change. + // Schema changes will update the feature table if the changes are valid. + // All changes except the following are valid: + // - Changes to feature table name. + // - Changes to entities + // - Changes to feature name and type + ApplyFeatureTable(ctx context.Context, in *ApplyFeatureTableRequest, opts ...grpc.CallOption) (*ApplyFeatureTableResponse, error) + // List feature tables that match a given filter. + // Returns the references of the Feature Tables matching that filter. If none are found, + // an empty list will be returned. + // If no filter is provided in the request, the response will match all the feature + // tables currently stored in the registry. + ListFeatureTables(ctx context.Context, in *ListFeatureTablesRequest, opts ...grpc.CallOption) (*ListFeatureTablesResponse, error) + // Returns a specific feature table + GetFeatureTable(ctx context.Context, in *GetFeatureTableRequest, opts ...grpc.CallOption) (*GetFeatureTableResponse, error) + // Delete a specific feature table + DeleteFeatureTable(ctx context.Context, in *DeleteFeatureTableRequest, opts ...grpc.CallOption) (*DeleteFeatureTableResponse, error) + // Lists all online stores + ListOnlineStores(ctx context.Context, in *ListOnlineStoresRequest, opts ...grpc.CallOption) (*ListOnlineStoresResponse, error) + // Returns a specific online stores + GetOnlineStore(ctx context.Context, in *GetOnlineStoreRequest, opts ...grpc.CallOption) (*GetOnlineStoreResponse, error) + // Registers new online store to feast core + // or updates properties for existing online store + RegisterOnlineStore(ctx context.Context, in *RegisterOnlineStoreRequest, opts ...grpc.CallOption) (*RegisterOnlineStoreResponse, error) + // Archives an online store to mark it deprecated + ArchiveOnlineStore(ctx context.Context, in *ArchiveOnlineStoreRequest, opts ...grpc.CallOption) (*ArchiveOnlineStoreResponse, error) +} + +type coreServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewCoreServiceClient(cc grpc.ClientConnInterface) CoreServiceClient { + return &coreServiceClient{cc} +} + +func (c *coreServiceClient) GetFeastCoreVersion(ctx context.Context, in *GetFeastCoreVersionRequest, opts ...grpc.CallOption) (*GetFeastCoreVersionResponse, error) { + out := new(GetFeastCoreVersionResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/GetFeastCoreVersion", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) GetEntity(ctx context.Context, in *GetEntityRequest, opts ...grpc.CallOption) (*GetEntityResponse, error) { + out := new(GetEntityResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/GetEntity", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) ListFeatures(ctx context.Context, in *ListFeaturesRequest, opts ...grpc.CallOption) (*ListFeaturesResponse, error) { + out := new(ListFeaturesResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/ListFeatures", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) ApplyEntity(ctx context.Context, in *ApplyEntityRequest, opts ...grpc.CallOption) (*ApplyEntityResponse, error) { + out := new(ApplyEntityResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/ApplyEntity", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) ListEntities(ctx context.Context, in *ListEntitiesRequest, opts ...grpc.CallOption) (*ListEntitiesResponse, error) { + out := new(ListEntitiesResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/ListEntities", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) CreateProject(ctx context.Context, in *CreateProjectRequest, opts ...grpc.CallOption) (*CreateProjectResponse, error) { + out := new(CreateProjectResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/CreateProject", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) ArchiveProject(ctx context.Context, in *ArchiveProjectRequest, opts ...grpc.CallOption) (*ArchiveProjectResponse, error) { + out := new(ArchiveProjectResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/ArchiveProject", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) ListProjects(ctx context.Context, in *ListProjectsRequest, opts ...grpc.CallOption) (*ListProjectsResponse, error) { + out := new(ListProjectsResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/ListProjects", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) ApplyFeatureTable(ctx context.Context, in *ApplyFeatureTableRequest, opts ...grpc.CallOption) (*ApplyFeatureTableResponse, error) { + out := new(ApplyFeatureTableResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/ApplyFeatureTable", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) ListFeatureTables(ctx context.Context, in *ListFeatureTablesRequest, opts ...grpc.CallOption) (*ListFeatureTablesResponse, error) { + out := new(ListFeatureTablesResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/ListFeatureTables", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) GetFeatureTable(ctx context.Context, in *GetFeatureTableRequest, opts ...grpc.CallOption) (*GetFeatureTableResponse, error) { + out := new(GetFeatureTableResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/GetFeatureTable", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) DeleteFeatureTable(ctx context.Context, in *DeleteFeatureTableRequest, opts ...grpc.CallOption) (*DeleteFeatureTableResponse, error) { + out := new(DeleteFeatureTableResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/DeleteFeatureTable", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) ListOnlineStores(ctx context.Context, in *ListOnlineStoresRequest, opts ...grpc.CallOption) (*ListOnlineStoresResponse, error) { + out := new(ListOnlineStoresResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/ListOnlineStores", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) GetOnlineStore(ctx context.Context, in *GetOnlineStoreRequest, opts ...grpc.CallOption) (*GetOnlineStoreResponse, error) { + out := new(GetOnlineStoreResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/GetOnlineStore", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) RegisterOnlineStore(ctx context.Context, in *RegisterOnlineStoreRequest, opts ...grpc.CallOption) (*RegisterOnlineStoreResponse, error) { + out := new(RegisterOnlineStoreResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/RegisterOnlineStore", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *coreServiceClient) ArchiveOnlineStore(ctx context.Context, in *ArchiveOnlineStoreRequest, opts ...grpc.CallOption) (*ArchiveOnlineStoreResponse, error) { + out := new(ArchiveOnlineStoreResponse) + err := c.cc.Invoke(ctx, "/feast.core.CoreService/ArchiveOnlineStore", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// CoreServiceServer is the server API for CoreService service. +// All implementations should embed UnimplementedCoreServiceServer +// for forward compatibility +type CoreServiceServer interface { + // Retrieve version information about this Feast deployment + GetFeastCoreVersion(context.Context, *GetFeastCoreVersionRequest) (*GetFeastCoreVersionResponse, error) + // Returns a specific entity + GetEntity(context.Context, *GetEntityRequest) (*GetEntityResponse, error) + // Returns all feature references and respective features matching that filter. If none are found + // an empty map will be returned + // If no filter is provided in the request, the response will contain all the features + // currently stored in the default project. + ListFeatures(context.Context, *ListFeaturesRequest) (*ListFeaturesResponse, error) + // Create or update and existing entity. + // + // This function is idempotent - it will not create a new entity if schema does not change. + // Schema changes will update the entity if the changes are valid. + // Following changes are not valid: + // - Changes to name + // - Changes to type + ApplyEntity(context.Context, *ApplyEntityRequest) (*ApplyEntityResponse, error) + // Returns all entity references and respective entities matching that filter. If none are found + // an empty map will be returned + // If no filter is provided in the request, the response will contain all the entities + // currently stored in the default project. + ListEntities(context.Context, *ListEntitiesRequest) (*ListEntitiesResponse, error) + // Creates a project. Projects serve as namespaces within which resources like features will be + // created. Feature table names as must be unique within a project while field (Feature/Entity) names + // must be unique within a Feature Table. Project names themselves must be globally unique. + CreateProject(context.Context, *CreateProjectRequest) (*CreateProjectResponse, error) + // Archives a project. Archived projects will continue to exist and function, but won't be visible + // through the Core API. Any existing ingestion or serving requests will continue to function, + // but will result in warning messages being logged. It is not possible to unarchive a project + // through the Core API + ArchiveProject(context.Context, *ArchiveProjectRequest) (*ArchiveProjectResponse, error) + // Lists all projects active projects. + ListProjects(context.Context, *ListProjectsRequest) (*ListProjectsResponse, error) + // Create or update an existing feature table. + // This function is idempotent - it will not create a new feature table if the schema does not change. + // Schema changes will update the feature table if the changes are valid. + // All changes except the following are valid: + // - Changes to feature table name. + // - Changes to entities + // - Changes to feature name and type + ApplyFeatureTable(context.Context, *ApplyFeatureTableRequest) (*ApplyFeatureTableResponse, error) + // List feature tables that match a given filter. + // Returns the references of the Feature Tables matching that filter. If none are found, + // an empty list will be returned. + // If no filter is provided in the request, the response will match all the feature + // tables currently stored in the registry. + ListFeatureTables(context.Context, *ListFeatureTablesRequest) (*ListFeatureTablesResponse, error) + // Returns a specific feature table + GetFeatureTable(context.Context, *GetFeatureTableRequest) (*GetFeatureTableResponse, error) + // Delete a specific feature table + DeleteFeatureTable(context.Context, *DeleteFeatureTableRequest) (*DeleteFeatureTableResponse, error) + // Lists all online stores + ListOnlineStores(context.Context, *ListOnlineStoresRequest) (*ListOnlineStoresResponse, error) + // Returns a specific online stores + GetOnlineStore(context.Context, *GetOnlineStoreRequest) (*GetOnlineStoreResponse, error) + // Registers new online store to feast core + // or updates properties for existing online store + RegisterOnlineStore(context.Context, *RegisterOnlineStoreRequest) (*RegisterOnlineStoreResponse, error) + // Archives an online store to mark it deprecated + ArchiveOnlineStore(context.Context, *ArchiveOnlineStoreRequest) (*ArchiveOnlineStoreResponse, error) +} + +// UnimplementedCoreServiceServer should be embedded to have forward compatible implementations. +type UnimplementedCoreServiceServer struct { +} + +func (UnimplementedCoreServiceServer) GetFeastCoreVersion(context.Context, *GetFeastCoreVersionRequest) (*GetFeastCoreVersionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetFeastCoreVersion not implemented") +} +func (UnimplementedCoreServiceServer) GetEntity(context.Context, *GetEntityRequest) (*GetEntityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetEntity not implemented") +} +func (UnimplementedCoreServiceServer) ListFeatures(context.Context, *ListFeaturesRequest) (*ListFeaturesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListFeatures not implemented") +} +func (UnimplementedCoreServiceServer) ApplyEntity(context.Context, *ApplyEntityRequest) (*ApplyEntityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ApplyEntity not implemented") +} +func (UnimplementedCoreServiceServer) ListEntities(context.Context, *ListEntitiesRequest) (*ListEntitiesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListEntities not implemented") +} +func (UnimplementedCoreServiceServer) CreateProject(context.Context, *CreateProjectRequest) (*CreateProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateProject not implemented") +} +func (UnimplementedCoreServiceServer) ArchiveProject(context.Context, *ArchiveProjectRequest) (*ArchiveProjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ArchiveProject not implemented") +} +func (UnimplementedCoreServiceServer) ListProjects(context.Context, *ListProjectsRequest) (*ListProjectsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListProjects not implemented") +} +func (UnimplementedCoreServiceServer) ApplyFeatureTable(context.Context, *ApplyFeatureTableRequest) (*ApplyFeatureTableResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ApplyFeatureTable not implemented") +} +func (UnimplementedCoreServiceServer) ListFeatureTables(context.Context, *ListFeatureTablesRequest) (*ListFeatureTablesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListFeatureTables not implemented") +} +func (UnimplementedCoreServiceServer) GetFeatureTable(context.Context, *GetFeatureTableRequest) (*GetFeatureTableResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetFeatureTable not implemented") +} +func (UnimplementedCoreServiceServer) DeleteFeatureTable(context.Context, *DeleteFeatureTableRequest) (*DeleteFeatureTableResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteFeatureTable not implemented") +} +func (UnimplementedCoreServiceServer) ListOnlineStores(context.Context, *ListOnlineStoresRequest) (*ListOnlineStoresResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListOnlineStores not implemented") +} +func (UnimplementedCoreServiceServer) GetOnlineStore(context.Context, *GetOnlineStoreRequest) (*GetOnlineStoreResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetOnlineStore not implemented") +} +func (UnimplementedCoreServiceServer) RegisterOnlineStore(context.Context, *RegisterOnlineStoreRequest) (*RegisterOnlineStoreResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RegisterOnlineStore not implemented") +} +func (UnimplementedCoreServiceServer) ArchiveOnlineStore(context.Context, *ArchiveOnlineStoreRequest) (*ArchiveOnlineStoreResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ArchiveOnlineStore not implemented") +} + +// UnsafeCoreServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to CoreServiceServer will +// result in compilation errors. +type UnsafeCoreServiceServer interface { + mustEmbedUnimplementedCoreServiceServer() +} + +func RegisterCoreServiceServer(s grpc.ServiceRegistrar, srv CoreServiceServer) { + s.RegisterService(&CoreService_ServiceDesc, srv) +} + +func _CoreService_GetFeastCoreVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetFeastCoreVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).GetFeastCoreVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/GetFeastCoreVersion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).GetFeastCoreVersion(ctx, req.(*GetFeastCoreVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_GetEntity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetEntityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).GetEntity(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/GetEntity", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).GetEntity(ctx, req.(*GetEntityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_ListFeatures_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListFeaturesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).ListFeatures(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/ListFeatures", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).ListFeatures(ctx, req.(*ListFeaturesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_ApplyEntity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ApplyEntityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).ApplyEntity(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/ApplyEntity", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).ApplyEntity(ctx, req.(*ApplyEntityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_ListEntities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListEntitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).ListEntities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/ListEntities", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).ListEntities(ctx, req.(*ListEntitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_CreateProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateProjectRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).CreateProject(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/CreateProject", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).CreateProject(ctx, req.(*CreateProjectRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_ArchiveProject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ArchiveProjectRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).ArchiveProject(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/ArchiveProject", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).ArchiveProject(ctx, req.(*ArchiveProjectRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_ListProjects_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListProjectsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).ListProjects(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/ListProjects", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).ListProjects(ctx, req.(*ListProjectsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_ApplyFeatureTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ApplyFeatureTableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).ApplyFeatureTable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/ApplyFeatureTable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).ApplyFeatureTable(ctx, req.(*ApplyFeatureTableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_ListFeatureTables_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListFeatureTablesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).ListFeatureTables(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/ListFeatureTables", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).ListFeatureTables(ctx, req.(*ListFeatureTablesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_GetFeatureTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetFeatureTableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).GetFeatureTable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/GetFeatureTable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).GetFeatureTable(ctx, req.(*GetFeatureTableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_DeleteFeatureTable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteFeatureTableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).DeleteFeatureTable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/DeleteFeatureTable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).DeleteFeatureTable(ctx, req.(*DeleteFeatureTableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_ListOnlineStores_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListOnlineStoresRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).ListOnlineStores(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/ListOnlineStores", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).ListOnlineStores(ctx, req.(*ListOnlineStoresRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_GetOnlineStore_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetOnlineStoreRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).GetOnlineStore(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/GetOnlineStore", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).GetOnlineStore(ctx, req.(*GetOnlineStoreRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_RegisterOnlineStore_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RegisterOnlineStoreRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).RegisterOnlineStore(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/RegisterOnlineStore", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).RegisterOnlineStore(ctx, req.(*RegisterOnlineStoreRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CoreService_ArchiveOnlineStore_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ArchiveOnlineStoreRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CoreServiceServer).ArchiveOnlineStore(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/feast.core.CoreService/ArchiveOnlineStore", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CoreServiceServer).ArchiveOnlineStore(ctx, req.(*ArchiveOnlineStoreRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// CoreService_ServiceDesc is the grpc.ServiceDesc for CoreService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var CoreService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "feast.core.CoreService", + HandlerType: (*CoreServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetFeastCoreVersion", + Handler: _CoreService_GetFeastCoreVersion_Handler, + }, + { + MethodName: "GetEntity", + Handler: _CoreService_GetEntity_Handler, + }, + { + MethodName: "ListFeatures", + Handler: _CoreService_ListFeatures_Handler, + }, + { + MethodName: "ApplyEntity", + Handler: _CoreService_ApplyEntity_Handler, + }, + { + MethodName: "ListEntities", + Handler: _CoreService_ListEntities_Handler, + }, + { + MethodName: "CreateProject", + Handler: _CoreService_CreateProject_Handler, + }, + { + MethodName: "ArchiveProject", + Handler: _CoreService_ArchiveProject_Handler, + }, + { + MethodName: "ListProjects", + Handler: _CoreService_ListProjects_Handler, + }, + { + MethodName: "ApplyFeatureTable", + Handler: _CoreService_ApplyFeatureTable_Handler, + }, + { + MethodName: "ListFeatureTables", + Handler: _CoreService_ListFeatureTables_Handler, + }, + { + MethodName: "GetFeatureTable", + Handler: _CoreService_GetFeatureTable_Handler, + }, + { + MethodName: "DeleteFeatureTable", + Handler: _CoreService_DeleteFeatureTable_Handler, + }, + { + MethodName: "ListOnlineStores", + Handler: _CoreService_ListOnlineStores_Handler, + }, + { + MethodName: "GetOnlineStore", + Handler: _CoreService_GetOnlineStore_Handler, + }, + { + MethodName: "RegisterOnlineStore", + Handler: _CoreService_RegisterOnlineStore_Handler, + }, + { + MethodName: "ArchiveOnlineStore", + Handler: _CoreService_ArchiveOnlineStore_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "feast/core/CoreService.proto", +} diff --git a/plugins/extractors/caramlstore/internal/core/DataFormat.pb.go b/plugins/extractors/caramlstore/internal/core/DataFormat.pb.go new file mode 100644 index 000000000..a66e230d5 --- /dev/null +++ b/plugins/extractors/caramlstore/internal/core/DataFormat.pb.go @@ -0,0 +1,480 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: feast/core/DataFormat.proto + +package core + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Defines the file format encoding the features/entity data in files +type FileFormat struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Format: + // *FileFormat_ParquetFormat_ + Format isFileFormat_Format `protobuf_oneof:"format"` +} + +func (x *FileFormat) Reset() { + *x = FileFormat{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_DataFormat_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileFormat) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileFormat) ProtoMessage() {} + +func (x *FileFormat) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_DataFormat_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileFormat.ProtoReflect.Descriptor instead. +func (*FileFormat) Descriptor() ([]byte, []int) { + return file_feast_core_DataFormat_proto_rawDescGZIP(), []int{0} +} + +func (m *FileFormat) GetFormat() isFileFormat_Format { + if m != nil { + return m.Format + } + return nil +} + +func (x *FileFormat) GetParquetFormat() *FileFormat_ParquetFormat { + if x, ok := x.GetFormat().(*FileFormat_ParquetFormat_); ok { + return x.ParquetFormat + } + return nil +} + +type isFileFormat_Format interface { + isFileFormat_Format() +} + +type FileFormat_ParquetFormat_ struct { + ParquetFormat *FileFormat_ParquetFormat `protobuf:"bytes,1,opt,name=parquet_format,json=parquetFormat,proto3,oneof"` +} + +func (*FileFormat_ParquetFormat_) isFileFormat_Format() {} + +// Defines the data format encoding features/entity data in data streams +type StreamFormat struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Specifies the data format and format specific options + // + // Types that are assignable to Format: + // *StreamFormat_AvroFormat_ + // *StreamFormat_ProtoFormat_ + Format isStreamFormat_Format `protobuf_oneof:"format"` +} + +func (x *StreamFormat) Reset() { + *x = StreamFormat{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_DataFormat_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamFormat) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamFormat) ProtoMessage() {} + +func (x *StreamFormat) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_DataFormat_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamFormat.ProtoReflect.Descriptor instead. +func (*StreamFormat) Descriptor() ([]byte, []int) { + return file_feast_core_DataFormat_proto_rawDescGZIP(), []int{1} +} + +func (m *StreamFormat) GetFormat() isStreamFormat_Format { + if m != nil { + return m.Format + } + return nil +} + +func (x *StreamFormat) GetAvroFormat() *StreamFormat_AvroFormat { + if x, ok := x.GetFormat().(*StreamFormat_AvroFormat_); ok { + return x.AvroFormat + } + return nil +} + +func (x *StreamFormat) GetProtoFormat() *StreamFormat_ProtoFormat { + if x, ok := x.GetFormat().(*StreamFormat_ProtoFormat_); ok { + return x.ProtoFormat + } + return nil +} + +type isStreamFormat_Format interface { + isStreamFormat_Format() +} + +type StreamFormat_AvroFormat_ struct { + AvroFormat *StreamFormat_AvroFormat `protobuf:"bytes,1,opt,name=avro_format,json=avroFormat,proto3,oneof"` +} + +type StreamFormat_ProtoFormat_ struct { + ProtoFormat *StreamFormat_ProtoFormat `protobuf:"bytes,2,opt,name=proto_format,json=protoFormat,proto3,oneof"` +} + +func (*StreamFormat_AvroFormat_) isStreamFormat_Format() {} + +func (*StreamFormat_ProtoFormat_) isStreamFormat_Format() {} + +// Defines options for the Parquet data format +type FileFormat_ParquetFormat struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *FileFormat_ParquetFormat) Reset() { + *x = FileFormat_ParquetFormat{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_DataFormat_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileFormat_ParquetFormat) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileFormat_ParquetFormat) ProtoMessage() {} + +func (x *FileFormat_ParquetFormat) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_DataFormat_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileFormat_ParquetFormat.ProtoReflect.Descriptor instead. +func (*FileFormat_ParquetFormat) Descriptor() ([]byte, []int) { + return file_feast_core_DataFormat_proto_rawDescGZIP(), []int{0, 0} +} + +// Defines options for the protobuf data format +type StreamFormat_ProtoFormat struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Classpath to the generated Java Protobuf class that can be used to decode + // Feature data from the obtained stream message + ClassPath string `protobuf:"bytes,1,opt,name=class_path,json=classPath,proto3" json:"class_path,omitempty"` +} + +func (x *StreamFormat_ProtoFormat) Reset() { + *x = StreamFormat_ProtoFormat{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_DataFormat_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamFormat_ProtoFormat) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamFormat_ProtoFormat) ProtoMessage() {} + +func (x *StreamFormat_ProtoFormat) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_DataFormat_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamFormat_ProtoFormat.ProtoReflect.Descriptor instead. +func (*StreamFormat_ProtoFormat) Descriptor() ([]byte, []int) { + return file_feast_core_DataFormat_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *StreamFormat_ProtoFormat) GetClassPath() string { + if x != nil { + return x.ClassPath + } + return "" +} + +// Defines options for the avro data format +type StreamFormat_AvroFormat struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional if used in a File DataSource as schema is embedded in avro file. + // Specifies the schema of the Avro message as JSON string. + SchemaJson string `protobuf:"bytes,1,opt,name=schema_json,json=schemaJson,proto3" json:"schema_json,omitempty"` +} + +func (x *StreamFormat_AvroFormat) Reset() { + *x = StreamFormat_AvroFormat{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_DataFormat_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamFormat_AvroFormat) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamFormat_AvroFormat) ProtoMessage() {} + +func (x *StreamFormat_AvroFormat) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_DataFormat_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamFormat_AvroFormat.ProtoReflect.Descriptor instead. +func (*StreamFormat_AvroFormat) Descriptor() ([]byte, []int) { + return file_feast_core_DataFormat_proto_rawDescGZIP(), []int{1, 1} +} + +func (x *StreamFormat_AvroFormat) GetSchemaJson() string { + if x != nil { + return x.SchemaJson + } + return "" +} + +var File_feast_core_DataFormat_proto protoreflect.FileDescriptor + +var file_feast_core_DataFormat_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x44, 0x61, 0x74, + 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x66, + 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x76, 0x0a, 0x0a, 0x46, 0x69, 0x6c, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x4d, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x71, 0x75, + 0x65, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, 0x69, 0x6c, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x71, 0x75, 0x65, 0x74, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x71, 0x75, 0x65, 0x74, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x1a, 0x0f, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x71, 0x75, 0x65, + 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x22, 0x88, 0x02, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x12, 0x46, 0x0a, 0x0b, 0x61, 0x76, 0x72, 0x6f, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x2e, 0x41, 0x76, 0x72, 0x6f, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x48, 0x00, 0x52, 0x0a, + 0x61, 0x76, 0x72, 0x6f, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x1a, 0x2c, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x50, + 0x61, 0x74, 0x68, 0x1a, 0x2d, 0x0a, 0x0a, 0x41, 0x76, 0x72, 0x6f, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4a, 0x73, + 0x6f, 0x6e, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x42, 0xba, 0x01, 0x0a, + 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x42, + 0x0f, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x4e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, + 0x64, 0x70, 0x66, 0x2f, 0x6d, 0x65, 0x74, 0x65, 0x6f, 0x72, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x63, 0x61, + 0x72, 0x61, 0x6d, 0x6c, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, + 0x72, 0x65, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x0a, 0x46, 0x65, 0x61, 0x73, 0x74, + 0x2e, 0x43, 0x6f, 0x72, 0x65, 0xca, 0x02, 0x0a, 0x46, 0x65, 0x61, 0x73, 0x74, 0x5c, 0x43, 0x6f, + 0x72, 0x65, 0xe2, 0x02, 0x16, 0x46, 0x65, 0x61, 0x73, 0x74, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0b, 0x46, 0x65, + 0x61, 0x73, 0x74, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_feast_core_DataFormat_proto_rawDescOnce sync.Once + file_feast_core_DataFormat_proto_rawDescData = file_feast_core_DataFormat_proto_rawDesc +) + +func file_feast_core_DataFormat_proto_rawDescGZIP() []byte { + file_feast_core_DataFormat_proto_rawDescOnce.Do(func() { + file_feast_core_DataFormat_proto_rawDescData = protoimpl.X.CompressGZIP(file_feast_core_DataFormat_proto_rawDescData) + }) + return file_feast_core_DataFormat_proto_rawDescData +} + +var file_feast_core_DataFormat_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_feast_core_DataFormat_proto_goTypes = []interface{}{ + (*FileFormat)(nil), // 0: feast.core.FileFormat + (*StreamFormat)(nil), // 1: feast.core.StreamFormat + (*FileFormat_ParquetFormat)(nil), // 2: feast.core.FileFormat.ParquetFormat + (*StreamFormat_ProtoFormat)(nil), // 3: feast.core.StreamFormat.ProtoFormat + (*StreamFormat_AvroFormat)(nil), // 4: feast.core.StreamFormat.AvroFormat +} +var file_feast_core_DataFormat_proto_depIdxs = []int32{ + 2, // 0: feast.core.FileFormat.parquet_format:type_name -> feast.core.FileFormat.ParquetFormat + 4, // 1: feast.core.StreamFormat.avro_format:type_name -> feast.core.StreamFormat.AvroFormat + 3, // 2: feast.core.StreamFormat.proto_format:type_name -> feast.core.StreamFormat.ProtoFormat + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_feast_core_DataFormat_proto_init() } +func file_feast_core_DataFormat_proto_init() { + if File_feast_core_DataFormat_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_feast_core_DataFormat_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileFormat); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_DataFormat_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamFormat); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_DataFormat_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileFormat_ParquetFormat); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_DataFormat_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamFormat_ProtoFormat); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_DataFormat_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamFormat_AvroFormat); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_feast_core_DataFormat_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*FileFormat_ParquetFormat_)(nil), + } + file_feast_core_DataFormat_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*StreamFormat_AvroFormat_)(nil), + (*StreamFormat_ProtoFormat_)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_feast_core_DataFormat_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_feast_core_DataFormat_proto_goTypes, + DependencyIndexes: file_feast_core_DataFormat_proto_depIdxs, + MessageInfos: file_feast_core_DataFormat_proto_msgTypes, + }.Build() + File_feast_core_DataFormat_proto = out.File + file_feast_core_DataFormat_proto_rawDesc = nil + file_feast_core_DataFormat_proto_goTypes = nil + file_feast_core_DataFormat_proto_depIdxs = nil +} diff --git a/plugins/extractors/caramlstore/internal/core/DataSource.pb.go b/plugins/extractors/caramlstore/internal/core/DataSource.pb.go new file mode 100644 index 000000000..95926aa35 --- /dev/null +++ b/plugins/extractors/caramlstore/internal/core/DataSource.pb.go @@ -0,0 +1,719 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: feast/core/DataSource.proto + +package core + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Type of Data Source. +type DataSource_SourceType int32 + +const ( + DataSource_INVALID DataSource_SourceType = 0 + DataSource_BATCH_FILE DataSource_SourceType = 1 + DataSource_BATCH_BIGQUERY DataSource_SourceType = 2 + DataSource_STREAM_KAFKA DataSource_SourceType = 3 + DataSource_STREAM_KINESIS DataSource_SourceType = 4 +) + +// Enum value maps for DataSource_SourceType. +var ( + DataSource_SourceType_name = map[int32]string{ + 0: "INVALID", + 1: "BATCH_FILE", + 2: "BATCH_BIGQUERY", + 3: "STREAM_KAFKA", + 4: "STREAM_KINESIS", + } + DataSource_SourceType_value = map[string]int32{ + "INVALID": 0, + "BATCH_FILE": 1, + "BATCH_BIGQUERY": 2, + "STREAM_KAFKA": 3, + "STREAM_KINESIS": 4, + } +) + +func (x DataSource_SourceType) Enum() *DataSource_SourceType { + p := new(DataSource_SourceType) + *p = x + return p +} + +func (x DataSource_SourceType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DataSource_SourceType) Descriptor() protoreflect.EnumDescriptor { + return file_feast_core_DataSource_proto_enumTypes[0].Descriptor() +} + +func (DataSource_SourceType) Type() protoreflect.EnumType { + return &file_feast_core_DataSource_proto_enumTypes[0] +} + +func (x DataSource_SourceType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DataSource_SourceType.Descriptor instead. +func (DataSource_SourceType) EnumDescriptor() ([]byte, []int) { + return file_feast_core_DataSource_proto_rawDescGZIP(), []int{0, 0} +} + +// Defines a Data Source that can be used source Feature data +type DataSource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type DataSource_SourceType `protobuf:"varint,1,opt,name=type,proto3,enum=feast.core.DataSource_SourceType" json:"type,omitempty"` + // Defines mapping between fields in the sourced data + // and fields in parent FeatureTable. + FieldMapping map[string]string `protobuf:"bytes,2,rep,name=field_mapping,json=fieldMapping,proto3" json:"field_mapping,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Must specify event timestamp column name + EventTimestampColumn string `protobuf:"bytes,3,opt,name=event_timestamp_column,json=eventTimestampColumn,proto3" json:"event_timestamp_column,omitempty"` + // (Optional) Specify partition column + // useful for file sources + DatePartitionColumn string `protobuf:"bytes,4,opt,name=date_partition_column,json=datePartitionColumn,proto3" json:"date_partition_column,omitempty"` + // Must specify creation timestamp column name + CreatedTimestampColumn string `protobuf:"bytes,5,opt,name=created_timestamp_column,json=createdTimestampColumn,proto3" json:"created_timestamp_column,omitempty"` + // DataSource options. + // + // Types that are assignable to Options: + // *DataSource_FileOptions_ + // *DataSource_BigqueryOptions + // *DataSource_KafkaOptions_ + // *DataSource_KinesisOptions_ + Options isDataSource_Options `protobuf_oneof:"options"` +} + +func (x *DataSource) Reset() { + *x = DataSource{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_DataSource_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataSource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataSource) ProtoMessage() {} + +func (x *DataSource) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_DataSource_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataSource.ProtoReflect.Descriptor instead. +func (*DataSource) Descriptor() ([]byte, []int) { + return file_feast_core_DataSource_proto_rawDescGZIP(), []int{0} +} + +func (x *DataSource) GetType() DataSource_SourceType { + if x != nil { + return x.Type + } + return DataSource_INVALID +} + +func (x *DataSource) GetFieldMapping() map[string]string { + if x != nil { + return x.FieldMapping + } + return nil +} + +func (x *DataSource) GetEventTimestampColumn() string { + if x != nil { + return x.EventTimestampColumn + } + return "" +} + +func (x *DataSource) GetDatePartitionColumn() string { + if x != nil { + return x.DatePartitionColumn + } + return "" +} + +func (x *DataSource) GetCreatedTimestampColumn() string { + if x != nil { + return x.CreatedTimestampColumn + } + return "" +} + +func (m *DataSource) GetOptions() isDataSource_Options { + if m != nil { + return m.Options + } + return nil +} + +func (x *DataSource) GetFileOptions() *DataSource_FileOptions { + if x, ok := x.GetOptions().(*DataSource_FileOptions_); ok { + return x.FileOptions + } + return nil +} + +func (x *DataSource) GetBigqueryOptions() *DataSource_BigQueryOptions { + if x, ok := x.GetOptions().(*DataSource_BigqueryOptions); ok { + return x.BigqueryOptions + } + return nil +} + +func (x *DataSource) GetKafkaOptions() *DataSource_KafkaOptions { + if x, ok := x.GetOptions().(*DataSource_KafkaOptions_); ok { + return x.KafkaOptions + } + return nil +} + +func (x *DataSource) GetKinesisOptions() *DataSource_KinesisOptions { + if x, ok := x.GetOptions().(*DataSource_KinesisOptions_); ok { + return x.KinesisOptions + } + return nil +} + +type isDataSource_Options interface { + isDataSource_Options() +} + +type DataSource_FileOptions_ struct { + FileOptions *DataSource_FileOptions `protobuf:"bytes,11,opt,name=file_options,json=fileOptions,proto3,oneof"` +} + +type DataSource_BigqueryOptions struct { + BigqueryOptions *DataSource_BigQueryOptions `protobuf:"bytes,12,opt,name=bigquery_options,json=bigqueryOptions,proto3,oneof"` +} + +type DataSource_KafkaOptions_ struct { + KafkaOptions *DataSource_KafkaOptions `protobuf:"bytes,13,opt,name=kafka_options,json=kafkaOptions,proto3,oneof"` +} + +type DataSource_KinesisOptions_ struct { + KinesisOptions *DataSource_KinesisOptions `protobuf:"bytes,14,opt,name=kinesis_options,json=kinesisOptions,proto3,oneof"` +} + +func (*DataSource_FileOptions_) isDataSource_Options() {} + +func (*DataSource_BigqueryOptions) isDataSource_Options() {} + +func (*DataSource_KafkaOptions_) isDataSource_Options() {} + +func (*DataSource_KinesisOptions_) isDataSource_Options() {} + +// Defines options for DataSource that sources features from a file +type DataSource_FileOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FileFormat *FileFormat `protobuf:"bytes,1,opt,name=file_format,json=fileFormat,proto3" json:"file_format,omitempty"` + // Target URL of file to retrieve and source features from. + // s3://path/to/file for AWS S3 storage + // gs://path/to/file for GCP GCS storage + // file:///path/to/file for local storage + FileUrl string `protobuf:"bytes,2,opt,name=file_url,json=fileUrl,proto3" json:"file_url,omitempty"` +} + +func (x *DataSource_FileOptions) Reset() { + *x = DataSource_FileOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_DataSource_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataSource_FileOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataSource_FileOptions) ProtoMessage() {} + +func (x *DataSource_FileOptions) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_DataSource_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataSource_FileOptions.ProtoReflect.Descriptor instead. +func (*DataSource_FileOptions) Descriptor() ([]byte, []int) { + return file_feast_core_DataSource_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *DataSource_FileOptions) GetFileFormat() *FileFormat { + if x != nil { + return x.FileFormat + } + return nil +} + +func (x *DataSource_FileOptions) GetFileUrl() string { + if x != nil { + return x.FileUrl + } + return "" +} + +// Defines options for DataSource that sources features from a BigQuery Query +type DataSource_BigQueryOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Full table reference in the form of [project:dataset.table] + TableRef string `protobuf:"bytes,1,opt,name=table_ref,json=tableRef,proto3" json:"table_ref,omitempty"` +} + +func (x *DataSource_BigQueryOptions) Reset() { + *x = DataSource_BigQueryOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_DataSource_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataSource_BigQueryOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataSource_BigQueryOptions) ProtoMessage() {} + +func (x *DataSource_BigQueryOptions) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_DataSource_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataSource_BigQueryOptions.ProtoReflect.Descriptor instead. +func (*DataSource_BigQueryOptions) Descriptor() ([]byte, []int) { + return file_feast_core_DataSource_proto_rawDescGZIP(), []int{0, 2} +} + +func (x *DataSource_BigQueryOptions) GetTableRef() string { + if x != nil { + return x.TableRef + } + return "" +} + +// Defines options for DataSource that sources features from Kafka messages. +// Each message should be a Protobuf that can be decoded with the generated +// Java Protobuf class at the given class path +type DataSource_KafkaOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Comma separated list of Kafka bootstrap servers. Used for feature tables without a defined source host[:port]] + BootstrapServers string `protobuf:"bytes,1,opt,name=bootstrap_servers,json=bootstrapServers,proto3" json:"bootstrap_servers,omitempty"` + // Kafka topic to collect feature data from. + Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"` + // Defines the stream data format encoding feature/entity data in Kafka messages. + MessageFormat *StreamFormat `protobuf:"bytes,3,opt,name=message_format,json=messageFormat,proto3" json:"message_format,omitempty"` +} + +func (x *DataSource_KafkaOptions) Reset() { + *x = DataSource_KafkaOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_DataSource_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataSource_KafkaOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataSource_KafkaOptions) ProtoMessage() {} + +func (x *DataSource_KafkaOptions) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_DataSource_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataSource_KafkaOptions.ProtoReflect.Descriptor instead. +func (*DataSource_KafkaOptions) Descriptor() ([]byte, []int) { + return file_feast_core_DataSource_proto_rawDescGZIP(), []int{0, 3} +} + +func (x *DataSource_KafkaOptions) GetBootstrapServers() string { + if x != nil { + return x.BootstrapServers + } + return "" +} + +func (x *DataSource_KafkaOptions) GetTopic() string { + if x != nil { + return x.Topic + } + return "" +} + +func (x *DataSource_KafkaOptions) GetMessageFormat() *StreamFormat { + if x != nil { + return x.MessageFormat + } + return nil +} + +// Defines options for DataSource that sources features from Kinesis records. +// Each record should be a Protobuf that can be decoded with the generated +// Java Protobuf class at the given class path +type DataSource_KinesisOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // AWS region of the Kinesis stream + Region string `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"` + // Name of the Kinesis stream to obtain feature data from. + StreamName string `protobuf:"bytes,2,opt,name=stream_name,json=streamName,proto3" json:"stream_name,omitempty"` + // Defines the data format encoding the feature/entity data in Kinesis records. + // Kinesis Data Sources support Avro and Proto as data formats. + RecordFormat *StreamFormat `protobuf:"bytes,3,opt,name=record_format,json=recordFormat,proto3" json:"record_format,omitempty"` +} + +func (x *DataSource_KinesisOptions) Reset() { + *x = DataSource_KinesisOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_DataSource_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DataSource_KinesisOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DataSource_KinesisOptions) ProtoMessage() {} + +func (x *DataSource_KinesisOptions) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_DataSource_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DataSource_KinesisOptions.ProtoReflect.Descriptor instead. +func (*DataSource_KinesisOptions) Descriptor() ([]byte, []int) { + return file_feast_core_DataSource_proto_rawDescGZIP(), []int{0, 4} +} + +func (x *DataSource_KinesisOptions) GetRegion() string { + if x != nil { + return x.Region + } + return "" +} + +func (x *DataSource_KinesisOptions) GetStreamName() string { + if x != nil { + return x.StreamName + } + return "" +} + +func (x *DataSource_KinesisOptions) GetRecordFormat() *StreamFormat { + if x != nil { + return x.RecordFormat + } + return nil +} + +var File_feast_core_DataSource_proto protoreflect.FileDescriptor + +var file_feast_core_DataSource_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x44, 0x61, 0x74, + 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x66, + 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x1b, 0x66, 0x65, 0x61, 0x73, 0x74, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x09, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x4d, 0x0a, 0x0d, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x66, + 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x34, 0x0a, 0x16, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x13, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x38, 0x0a, 0x18, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, + 0x47, 0x0a, 0x0c, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x66, 0x69, 0x6c, + 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x53, 0x0a, 0x10, 0x62, 0x69, 0x67, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x42, 0x69, 0x67, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x62, 0x69, + 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4a, 0x0a, + 0x0d, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4b, 0x61, 0x66, + 0x6b, 0x61, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x6b, 0x61, 0x66, + 0x6b, 0x61, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x50, 0x0a, 0x0f, 0x6b, 0x69, 0x6e, + 0x65, 0x73, 0x69, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4b, 0x69, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0e, 0x6b, 0x69, 0x6e, + 0x65, 0x73, 0x69, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x0b, + 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x72, 0x6c, 0x1a, + 0x2e, 0x0a, 0x0f, 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x1a, + 0x92, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x2b, 0x0a, 0x11, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x6f, 0x6f, + 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x12, 0x3f, 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x52, 0x0d, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x1a, 0x88, 0x01, 0x0a, 0x0e, 0x4b, 0x69, 0x6e, 0x65, 0x73, 0x69, 0x73, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, + 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x3d, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, + 0x63, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, + 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x41, + 0x54, 0x43, 0x48, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x41, + 0x54, 0x43, 0x48, 0x5f, 0x42, 0x49, 0x47, 0x51, 0x55, 0x45, 0x52, 0x59, 0x10, 0x02, 0x12, 0x10, + 0x0a, 0x0c, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4b, 0x41, 0x46, 0x4b, 0x41, 0x10, 0x03, + 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x4b, 0x49, 0x4e, 0x45, 0x53, + 0x49, 0x53, 0x10, 0x04, 0x42, 0x09, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0xba, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x42, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x6d, 0x65, 0x74, 0x65, 0x6f, 0x72, 0x2f, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, + 0x2f, 0x63, 0x61, 0x72, 0x61, 0x6d, 0x6c, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x66, 0x65, 0x61, 0x73, 0x74, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x0a, 0x46, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0xca, 0x02, 0x0a, 0x46, 0x65, 0x61, 0x73, 0x74, + 0x5c, 0x43, 0x6f, 0x72, 0x65, 0xe2, 0x02, 0x16, 0x46, 0x65, 0x61, 0x73, 0x74, 0x5c, 0x43, 0x6f, + 0x72, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x0b, 0x46, 0x65, 0x61, 0x73, 0x74, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_feast_core_DataSource_proto_rawDescOnce sync.Once + file_feast_core_DataSource_proto_rawDescData = file_feast_core_DataSource_proto_rawDesc +) + +func file_feast_core_DataSource_proto_rawDescGZIP() []byte { + file_feast_core_DataSource_proto_rawDescOnce.Do(func() { + file_feast_core_DataSource_proto_rawDescData = protoimpl.X.CompressGZIP(file_feast_core_DataSource_proto_rawDescData) + }) + return file_feast_core_DataSource_proto_rawDescData +} + +var file_feast_core_DataSource_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_feast_core_DataSource_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_feast_core_DataSource_proto_goTypes = []interface{}{ + (DataSource_SourceType)(0), // 0: feast.core.DataSource.SourceType + (*DataSource)(nil), // 1: feast.core.DataSource + nil, // 2: feast.core.DataSource.FieldMappingEntry + (*DataSource_FileOptions)(nil), // 3: feast.core.DataSource.FileOptions + (*DataSource_BigQueryOptions)(nil), // 4: feast.core.DataSource.BigQueryOptions + (*DataSource_KafkaOptions)(nil), // 5: feast.core.DataSource.KafkaOptions + (*DataSource_KinesisOptions)(nil), // 6: feast.core.DataSource.KinesisOptions + (*FileFormat)(nil), // 7: feast.core.FileFormat + (*StreamFormat)(nil), // 8: feast.core.StreamFormat +} +var file_feast_core_DataSource_proto_depIdxs = []int32{ + 0, // 0: feast.core.DataSource.type:type_name -> feast.core.DataSource.SourceType + 2, // 1: feast.core.DataSource.field_mapping:type_name -> feast.core.DataSource.FieldMappingEntry + 3, // 2: feast.core.DataSource.file_options:type_name -> feast.core.DataSource.FileOptions + 4, // 3: feast.core.DataSource.bigquery_options:type_name -> feast.core.DataSource.BigQueryOptions + 5, // 4: feast.core.DataSource.kafka_options:type_name -> feast.core.DataSource.KafkaOptions + 6, // 5: feast.core.DataSource.kinesis_options:type_name -> feast.core.DataSource.KinesisOptions + 7, // 6: feast.core.DataSource.FileOptions.file_format:type_name -> feast.core.FileFormat + 8, // 7: feast.core.DataSource.KafkaOptions.message_format:type_name -> feast.core.StreamFormat + 8, // 8: feast.core.DataSource.KinesisOptions.record_format:type_name -> feast.core.StreamFormat + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name +} + +func init() { file_feast_core_DataSource_proto_init() } +func file_feast_core_DataSource_proto_init() { + if File_feast_core_DataSource_proto != nil { + return + } + file_feast_core_DataFormat_proto_init() + if !protoimpl.UnsafeEnabled { + file_feast_core_DataSource_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataSource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_DataSource_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataSource_FileOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_DataSource_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataSource_BigQueryOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_DataSource_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataSource_KafkaOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_DataSource_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DataSource_KinesisOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_feast_core_DataSource_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*DataSource_FileOptions_)(nil), + (*DataSource_BigqueryOptions)(nil), + (*DataSource_KafkaOptions_)(nil), + (*DataSource_KinesisOptions_)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_feast_core_DataSource_proto_rawDesc, + NumEnums: 1, + NumMessages: 6, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_feast_core_DataSource_proto_goTypes, + DependencyIndexes: file_feast_core_DataSource_proto_depIdxs, + EnumInfos: file_feast_core_DataSource_proto_enumTypes, + MessageInfos: file_feast_core_DataSource_proto_msgTypes, + }.Build() + File_feast_core_DataSource_proto = out.File + file_feast_core_DataSource_proto_rawDesc = nil + file_feast_core_DataSource_proto_goTypes = nil + file_feast_core_DataSource_proto_depIdxs = nil +} diff --git a/plugins/extractors/caramlstore/internal/core/Entity.pb.go b/plugins/extractors/caramlstore/internal/core/Entity.pb.go new file mode 100644 index 000000000..88b2b26ff --- /dev/null +++ b/plugins/extractors/caramlstore/internal/core/Entity.pb.go @@ -0,0 +1,364 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: feast/core/Entity.proto + +package core + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Entity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User-specified specifications of this entity. + Spec *EntitySpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + // System-populated metadata for this entity. + Meta *EntityMeta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` +} + +func (x *Entity) Reset() { + *x = Entity{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_Entity_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Entity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Entity) ProtoMessage() {} + +func (x *Entity) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_Entity_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Entity.ProtoReflect.Descriptor instead. +func (*Entity) Descriptor() ([]byte, []int) { + return file_feast_core_Entity_proto_rawDescGZIP(), []int{0} +} + +func (x *Entity) GetSpec() *EntitySpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *Entity) GetMeta() *EntityMeta { + if x != nil { + return x.Meta + } + return nil +} + +type EntitySpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of the entity. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Type of the entity. + ValueType ValueType_Enum `protobuf:"varint,2,opt,name=value_type,json=valueType,proto3,enum=feast.types.ValueType_Enum" json:"value_type,omitempty"` + // Description of the entity. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // User defined metadata + Labels map[string]string `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EntitySpec) Reset() { + *x = EntitySpec{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_Entity_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntitySpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntitySpec) ProtoMessage() {} + +func (x *EntitySpec) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_Entity_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntitySpec.ProtoReflect.Descriptor instead. +func (*EntitySpec) Descriptor() ([]byte, []int) { + return file_feast_core_Entity_proto_rawDescGZIP(), []int{1} +} + +func (x *EntitySpec) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *EntitySpec) GetValueType() ValueType_Enum { + if x != nil { + return x.ValueType + } + return ValueType_INVALID +} + +func (x *EntitySpec) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *EntitySpec) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +type EntityMeta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CreatedTimestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=created_timestamp,json=createdTimestamp,proto3" json:"created_timestamp,omitempty"` + LastUpdatedTimestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=last_updated_timestamp,json=lastUpdatedTimestamp,proto3" json:"last_updated_timestamp,omitempty"` +} + +func (x *EntityMeta) Reset() { + *x = EntityMeta{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_Entity_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntityMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityMeta) ProtoMessage() {} + +func (x *EntityMeta) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_Entity_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityMeta.ProtoReflect.Descriptor instead. +func (*EntityMeta) Descriptor() ([]byte, []int) { + return file_feast_core_Entity_proto_rawDescGZIP(), []int{2} +} + +func (x *EntityMeta) GetCreatedTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.CreatedTimestamp + } + return nil +} + +func (x *EntityMeta) GetLastUpdatedTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.LastUpdatedTimestamp + } + return nil +} + +var File_feast_core_Entity_proto protoreflect.FileDescriptor + +var file_feast_core_Entity_proto_rawDesc = []byte{ + 0x0a, 0x17, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x66, 0x65, 0x61, 0x73, 0x74, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x17, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x74, 0x79, 0x70, + 0x65, 0x73, 0x2f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x60, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x04, 0x73, 0x70, 0x65, + 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x2a, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x04, 0x6d, 0x65, 0x74, + 0x61, 0x22, 0xf5, 0x01, 0x0a, 0x0a, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x70, 0x65, 0x63, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, + 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa7, 0x01, 0x0a, 0x0a, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x47, 0x0a, 0x11, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x10, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x12, 0x50, 0x0a, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x14, 0x6c, + 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x42, 0xb6, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x42, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x6d, 0x65, 0x74, 0x65, 0x6f, 0x72, 0x2f, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, + 0x2f, 0x63, 0x61, 0x72, 0x61, 0x6d, 0x6c, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x66, 0x65, 0x61, 0x73, 0x74, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x0a, 0x46, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0xca, 0x02, 0x0a, 0x46, 0x65, 0x61, 0x73, 0x74, + 0x5c, 0x43, 0x6f, 0x72, 0x65, 0xe2, 0x02, 0x16, 0x46, 0x65, 0x61, 0x73, 0x74, 0x5c, 0x43, 0x6f, + 0x72, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x0b, 0x46, 0x65, 0x61, 0x73, 0x74, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_feast_core_Entity_proto_rawDescOnce sync.Once + file_feast_core_Entity_proto_rawDescData = file_feast_core_Entity_proto_rawDesc +) + +func file_feast_core_Entity_proto_rawDescGZIP() []byte { + file_feast_core_Entity_proto_rawDescOnce.Do(func() { + file_feast_core_Entity_proto_rawDescData = protoimpl.X.CompressGZIP(file_feast_core_Entity_proto_rawDescData) + }) + return file_feast_core_Entity_proto_rawDescData +} + +var file_feast_core_Entity_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_feast_core_Entity_proto_goTypes = []interface{}{ + (*Entity)(nil), // 0: feast.core.Entity + (*EntitySpec)(nil), // 1: feast.core.EntitySpec + (*EntityMeta)(nil), // 2: feast.core.EntityMeta + nil, // 3: feast.core.EntitySpec.LabelsEntry + (ValueType_Enum)(0), // 4: feast.types.ValueType.Enum + (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp +} +var file_feast_core_Entity_proto_depIdxs = []int32{ + 1, // 0: feast.core.Entity.spec:type_name -> feast.core.EntitySpec + 2, // 1: feast.core.Entity.meta:type_name -> feast.core.EntityMeta + 4, // 2: feast.core.EntitySpec.value_type:type_name -> feast.types.ValueType.Enum + 3, // 3: feast.core.EntitySpec.labels:type_name -> feast.core.EntitySpec.LabelsEntry + 5, // 4: feast.core.EntityMeta.created_timestamp:type_name -> google.protobuf.Timestamp + 5, // 5: feast.core.EntityMeta.last_updated_timestamp:type_name -> google.protobuf.Timestamp + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_feast_core_Entity_proto_init() } +func file_feast_core_Entity_proto_init() { + if File_feast_core_Entity_proto != nil { + return + } + file_feast_types_Value_proto_init() + if !protoimpl.UnsafeEnabled { + file_feast_core_Entity_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Entity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_Entity_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntitySpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_Entity_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntityMeta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_feast_core_Entity_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_feast_core_Entity_proto_goTypes, + DependencyIndexes: file_feast_core_Entity_proto_depIdxs, + MessageInfos: file_feast_core_Entity_proto_msgTypes, + }.Build() + File_feast_core_Entity_proto = out.File + file_feast_core_Entity_proto_rawDesc = nil + file_feast_core_Entity_proto_goTypes = nil + file_feast_core_Entity_proto_depIdxs = nil +} diff --git a/plugins/extractors/caramlstore/internal/core/Feature.pb.go b/plugins/extractors/caramlstore/internal/core/Feature.pb.go new file mode 100644 index 000000000..6a9a32f9c --- /dev/null +++ b/plugins/extractors/caramlstore/internal/core/Feature.pb.go @@ -0,0 +1,190 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: feast/core/Feature.proto + +package core + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type FeatureSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of the feature. Not updatable. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Value type of the feature. Not updatable. + ValueType ValueType_Enum `protobuf:"varint,2,opt,name=value_type,json=valueType,proto3,enum=feast.types.ValueType_Enum" json:"value_type,omitempty"` + // Labels for user defined metadata on a feature + Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *FeatureSpec) Reset() { + *x = FeatureSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_Feature_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FeatureSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FeatureSpec) ProtoMessage() {} + +func (x *FeatureSpec) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_Feature_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FeatureSpec.ProtoReflect.Descriptor instead. +func (*FeatureSpec) Descriptor() ([]byte, []int) { + return file_feast_core_Feature_proto_rawDescGZIP(), []int{0} +} + +func (x *FeatureSpec) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FeatureSpec) GetValueType() ValueType_Enum { + if x != nil { + return x.ValueType + } + return ValueType_INVALID +} + +func (x *FeatureSpec) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +var File_feast_core_Feature_proto protoreflect.FileDescriptor + +var file_feast_core_Feature_proto_rawDesc = []byte{ + 0x0a, 0x18, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x17, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xd5, 0x01, 0x0a, 0x0b, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x2e, + 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x3b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0xb7, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, + 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x42, 0x0c, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4e, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x6d, 0x65, 0x74, 0x65, + 0x6f, 0x72, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x63, 0x61, 0x72, 0x61, 0x6d, 0x6c, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, + 0xaa, 0x02, 0x0a, 0x46, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0xca, 0x02, 0x0a, + 0x46, 0x65, 0x61, 0x73, 0x74, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0xe2, 0x02, 0x16, 0x46, 0x65, 0x61, + 0x73, 0x74, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x0b, 0x46, 0x65, 0x61, 0x73, 0x74, 0x3a, 0x3a, 0x43, 0x6f, 0x72, + 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_feast_core_Feature_proto_rawDescOnce sync.Once + file_feast_core_Feature_proto_rawDescData = file_feast_core_Feature_proto_rawDesc +) + +func file_feast_core_Feature_proto_rawDescGZIP() []byte { + file_feast_core_Feature_proto_rawDescOnce.Do(func() { + file_feast_core_Feature_proto_rawDescData = protoimpl.X.CompressGZIP(file_feast_core_Feature_proto_rawDescData) + }) + return file_feast_core_Feature_proto_rawDescData +} + +var file_feast_core_Feature_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_feast_core_Feature_proto_goTypes = []interface{}{ + (*FeatureSpec)(nil), // 0: feast.core.FeatureSpec + nil, // 1: feast.core.FeatureSpec.LabelsEntry + (ValueType_Enum)(0), // 2: feast.types.ValueType.Enum +} +var file_feast_core_Feature_proto_depIdxs = []int32{ + 2, // 0: feast.core.FeatureSpec.value_type:type_name -> feast.types.ValueType.Enum + 1, // 1: feast.core.FeatureSpec.labels:type_name -> feast.core.FeatureSpec.LabelsEntry + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_feast_core_Feature_proto_init() } +func file_feast_core_Feature_proto_init() { + if File_feast_core_Feature_proto != nil { + return + } + file_feast_types_Value_proto_init() + if !protoimpl.UnsafeEnabled { + file_feast_core_Feature_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FeatureSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_feast_core_Feature_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_feast_core_Feature_proto_goTypes, + DependencyIndexes: file_feast_core_Feature_proto_depIdxs, + MessageInfos: file_feast_core_Feature_proto_msgTypes, + }.Build() + File_feast_core_Feature_proto = out.File + file_feast_core_Feature_proto_rawDesc = nil + file_feast_core_Feature_proto_goTypes = nil + file_feast_core_Feature_proto_depIdxs = nil +} diff --git a/plugins/extractors/caramlstore/internal/core/FeatureTable.pb.go b/plugins/extractors/caramlstore/internal/core/FeatureTable.pb.go new file mode 100644 index 000000000..dc87b17d8 --- /dev/null +++ b/plugins/extractors/caramlstore/internal/core/FeatureTable.pb.go @@ -0,0 +1,481 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: feast/core/FeatureTable.proto + +package core + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type FeatureTable struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User-specified specifications of this feature table. + Spec *FeatureTableSpec `protobuf:"bytes,1,opt,name=spec,proto3" json:"spec,omitempty"` + // System-populated metadata for this feature table. + Meta *FeatureTableMeta `protobuf:"bytes,2,opt,name=meta,proto3" json:"meta,omitempty"` +} + +func (x *FeatureTable) Reset() { + *x = FeatureTable{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_FeatureTable_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FeatureTable) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FeatureTable) ProtoMessage() {} + +func (x *FeatureTable) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_FeatureTable_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FeatureTable.ProtoReflect.Descriptor instead. +func (*FeatureTable) Descriptor() ([]byte, []int) { + return file_feast_core_FeatureTable_proto_rawDescGZIP(), []int{0} +} + +func (x *FeatureTable) GetSpec() *FeatureTableSpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *FeatureTable) GetMeta() *FeatureTableMeta { + if x != nil { + return x.Meta + } + return nil +} + +type FeatureTableSpec struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of the feature table. Must be unique. Not updated. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // List names of entities to associate with the Features defined in this + // Feature Table. Not updatable. + Entities []string `protobuf:"bytes,3,rep,name=entities,proto3" json:"entities,omitempty"` + // List of features specifications for each feature defined with this feature table. + Features []*FeatureSpec `protobuf:"bytes,4,rep,name=features,proto3" json:"features,omitempty"` + // User defined metadata + Labels map[string]string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Features in this feature table can only be retrieved from online serving + // younger than max age. Age is measured as the duration of time between + // the feature's event timestamp and when the feature is retrieved + // Feature values outside max age will be returned as unset values and indicated to end user + MaxAge *durationpb.Duration `protobuf:"bytes,6,opt,name=max_age,json=maxAge,proto3" json:"max_age,omitempty"` + // Batch/Offline DataSource to source batch/offline feature data. + // Only batch DataSource can be specified + // (ie source type should start with 'BATCH_') + BatchSource *DataSource `protobuf:"bytes,7,opt,name=batch_source,json=batchSource,proto3" json:"batch_source,omitempty"` + // Stream/Online DataSource to source stream/online feature data. + // Only stream DataSource can be specified + // (ie source type should start with 'STREAM_') + StreamSource *DataSource `protobuf:"bytes,8,opt,name=stream_source,json=streamSource,proto3" json:"stream_source,omitempty"` + // Threshold to detect features that are close to be evicted. + // Used by Feast Serving to indicate that feature is stale. + // Must be less than max_age, since after max_age feature most probably will be garbage collected + StalenessThreshold *durationpb.Duration `protobuf:"bytes,9,opt,name=staleness_threshold,json=stalenessThreshold,proto3" json:"staleness_threshold,omitempty"` + // Database where features are stored for online serving + OnlineStore *OnlineStore `protobuf:"bytes,10,opt,name=online_store,json=onlineStore,proto3" json:"online_store,omitempty"` +} + +func (x *FeatureTableSpec) Reset() { + *x = FeatureTableSpec{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_FeatureTable_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FeatureTableSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FeatureTableSpec) ProtoMessage() {} + +func (x *FeatureTableSpec) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_FeatureTable_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FeatureTableSpec.ProtoReflect.Descriptor instead. +func (*FeatureTableSpec) Descriptor() ([]byte, []int) { + return file_feast_core_FeatureTable_proto_rawDescGZIP(), []int{1} +} + +func (x *FeatureTableSpec) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FeatureTableSpec) GetEntities() []string { + if x != nil { + return x.Entities + } + return nil +} + +func (x *FeatureTableSpec) GetFeatures() []*FeatureSpec { + if x != nil { + return x.Features + } + return nil +} + +func (x *FeatureTableSpec) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *FeatureTableSpec) GetMaxAge() *durationpb.Duration { + if x != nil { + return x.MaxAge + } + return nil +} + +func (x *FeatureTableSpec) GetBatchSource() *DataSource { + if x != nil { + return x.BatchSource + } + return nil +} + +func (x *FeatureTableSpec) GetStreamSource() *DataSource { + if x != nil { + return x.StreamSource + } + return nil +} + +func (x *FeatureTableSpec) GetStalenessThreshold() *durationpb.Duration { + if x != nil { + return x.StalenessThreshold + } + return nil +} + +func (x *FeatureTableSpec) GetOnlineStore() *OnlineStore { + if x != nil { + return x.OnlineStore + } + return nil +} + +type FeatureTableMeta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Time where this Feature Table is created + CreatedTimestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=created_timestamp,json=createdTimestamp,proto3" json:"created_timestamp,omitempty"` + // Time where this Feature Table is last updated + LastUpdatedTimestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=last_updated_timestamp,json=lastUpdatedTimestamp,proto3" json:"last_updated_timestamp,omitempty"` + // Auto incrementing revision no. of this Feature Table + Revision int64 `protobuf:"varint,3,opt,name=revision,proto3" json:"revision,omitempty"` + // Hash entities, features, batch_source and stream_source to inform JobService if + // jobs should be restarted should hash change + Hash string `protobuf:"bytes,4,opt,name=hash,proto3" json:"hash,omitempty"` +} + +func (x *FeatureTableMeta) Reset() { + *x = FeatureTableMeta{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_FeatureTable_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FeatureTableMeta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FeatureTableMeta) ProtoMessage() {} + +func (x *FeatureTableMeta) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_FeatureTable_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FeatureTableMeta.ProtoReflect.Descriptor instead. +func (*FeatureTableMeta) Descriptor() ([]byte, []int) { + return file_feast_core_FeatureTable_proto_rawDescGZIP(), []int{2} +} + +func (x *FeatureTableMeta) GetCreatedTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.CreatedTimestamp + } + return nil +} + +func (x *FeatureTableMeta) GetLastUpdatedTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.LastUpdatedTimestamp + } + return nil +} + +func (x *FeatureTableMeta) GetRevision() int64 { + if x != nil { + return x.Revision + } + return 0 +} + +func (x *FeatureTableMeta) GetHash() string { + if x != nil { + return x.Hash + } + return "" +} + +var File_feast_core_FeatureTable_proto protoreflect.FileDescriptor + +var file_feast_core_FeatureTable_proto_rawDesc = []byte{ + 0x0a, 0x1d, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x0a, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x66, 0x65, 0x61, 0x73, 0x74, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x72, 0x0a, 0x0c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x12, 0x30, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x12, 0x30, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, + 0x04, 0x6d, 0x65, 0x74, 0x61, 0x22, 0xa8, 0x04, 0x0a, 0x10, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x66, 0x65, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, + 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, + 0x40, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x12, 0x32, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6d, + 0x61, 0x78, 0x41, 0x67, 0x65, 0x12, 0x39, 0x0a, 0x0c, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x3b, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x0c, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4a, 0x0a, + 0x13, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, + 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x65, 0x73, 0x73, + 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x3a, 0x0a, 0x0c, 0x6f, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4f, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x0b, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xdd, 0x01, 0x0a, 0x10, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x47, 0x0a, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x50, + 0x0a, 0x16, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x14, 0x6c, 0x61, 0x73, 0x74, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, + 0x42, 0xbc, 0x01, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x42, 0x11, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x6d, 0x65, 0x74, 0x65, 0x6f, 0x72, + 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, + 0x6f, 0x72, 0x73, 0x2f, 0x63, 0x61, 0x72, 0x61, 0x6d, 0x6c, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, + 0x0a, 0x46, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0xca, 0x02, 0x0a, 0x46, 0x65, + 0x61, 0x73, 0x74, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0xe2, 0x02, 0x16, 0x46, 0x65, 0x61, 0x73, 0x74, + 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x0b, 0x46, 0x65, 0x61, 0x73, 0x74, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_feast_core_FeatureTable_proto_rawDescOnce sync.Once + file_feast_core_FeatureTable_proto_rawDescData = file_feast_core_FeatureTable_proto_rawDesc +) + +func file_feast_core_FeatureTable_proto_rawDescGZIP() []byte { + file_feast_core_FeatureTable_proto_rawDescOnce.Do(func() { + file_feast_core_FeatureTable_proto_rawDescData = protoimpl.X.CompressGZIP(file_feast_core_FeatureTable_proto_rawDescData) + }) + return file_feast_core_FeatureTable_proto_rawDescData +} + +var file_feast_core_FeatureTable_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_feast_core_FeatureTable_proto_goTypes = []interface{}{ + (*FeatureTable)(nil), // 0: feast.core.FeatureTable + (*FeatureTableSpec)(nil), // 1: feast.core.FeatureTableSpec + (*FeatureTableMeta)(nil), // 2: feast.core.FeatureTableMeta + nil, // 3: feast.core.FeatureTableSpec.LabelsEntry + (*FeatureSpec)(nil), // 4: feast.core.FeatureSpec + (*durationpb.Duration)(nil), // 5: google.protobuf.Duration + (*DataSource)(nil), // 6: feast.core.DataSource + (*OnlineStore)(nil), // 7: feast.core.OnlineStore + (*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp +} +var file_feast_core_FeatureTable_proto_depIdxs = []int32{ + 1, // 0: feast.core.FeatureTable.spec:type_name -> feast.core.FeatureTableSpec + 2, // 1: feast.core.FeatureTable.meta:type_name -> feast.core.FeatureTableMeta + 4, // 2: feast.core.FeatureTableSpec.features:type_name -> feast.core.FeatureSpec + 3, // 3: feast.core.FeatureTableSpec.labels:type_name -> feast.core.FeatureTableSpec.LabelsEntry + 5, // 4: feast.core.FeatureTableSpec.max_age:type_name -> google.protobuf.Duration + 6, // 5: feast.core.FeatureTableSpec.batch_source:type_name -> feast.core.DataSource + 6, // 6: feast.core.FeatureTableSpec.stream_source:type_name -> feast.core.DataSource + 5, // 7: feast.core.FeatureTableSpec.staleness_threshold:type_name -> google.protobuf.Duration + 7, // 8: feast.core.FeatureTableSpec.online_store:type_name -> feast.core.OnlineStore + 8, // 9: feast.core.FeatureTableMeta.created_timestamp:type_name -> google.protobuf.Timestamp + 8, // 10: feast.core.FeatureTableMeta.last_updated_timestamp:type_name -> google.protobuf.Timestamp + 11, // [11:11] is the sub-list for method output_type + 11, // [11:11] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name +} + +func init() { file_feast_core_FeatureTable_proto_init() } +func file_feast_core_FeatureTable_proto_init() { + if File_feast_core_FeatureTable_proto != nil { + return + } + file_feast_core_DataSource_proto_init() + file_feast_core_Feature_proto_init() + file_feast_core_OnlineStore_proto_init() + if !protoimpl.UnsafeEnabled { + file_feast_core_FeatureTable_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FeatureTable); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_FeatureTable_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FeatureTableSpec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_core_FeatureTable_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FeatureTableMeta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_feast_core_FeatureTable_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_feast_core_FeatureTable_proto_goTypes, + DependencyIndexes: file_feast_core_FeatureTable_proto_depIdxs, + MessageInfos: file_feast_core_FeatureTable_proto_msgTypes, + }.Build() + File_feast_core_FeatureTable_proto = out.File + file_feast_core_FeatureTable_proto_rawDesc = nil + file_feast_core_FeatureTable_proto_goTypes = nil + file_feast_core_FeatureTable_proto_depIdxs = nil +} diff --git a/plugins/extractors/caramlstore/internal/core/OnlineStore.pb.go b/plugins/extractors/caramlstore/internal/core/OnlineStore.pb.go new file mode 100644 index 000000000..1f0585399 --- /dev/null +++ b/plugins/extractors/caramlstore/internal/core/OnlineStore.pb.go @@ -0,0 +1,245 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: feast/core/OnlineStore.proto + +package core + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + _ "google.golang.org/protobuf/types/known/durationpb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type StoreType int32 + +const ( + // Unset + StoreType_UNSET StoreType = 0 + // google cloud NOSQL database service + StoreType_BIGTABLE StoreType = 1 + // redis in-memory database + StoreType_REDIS StoreType = 2 +) + +// Enum value maps for StoreType. +var ( + StoreType_name = map[int32]string{ + 0: "UNSET", + 1: "BIGTABLE", + 2: "REDIS", + } + StoreType_value = map[string]int32{ + "UNSET": 0, + "BIGTABLE": 1, + "REDIS": 2, + } +) + +func (x StoreType) Enum() *StoreType { + p := new(StoreType) + *p = x + return p +} + +func (x StoreType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StoreType) Descriptor() protoreflect.EnumDescriptor { + return file_feast_core_OnlineStore_proto_enumTypes[0].Descriptor() +} + +func (StoreType) Type() protoreflect.EnumType { + return &file_feast_core_OnlineStore_proto_enumTypes[0] +} + +func (x StoreType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use StoreType.Descriptor instead. +func (StoreType) EnumDescriptor() ([]byte, []int) { + return file_feast_core_OnlineStore_proto_rawDescGZIP(), []int{0} +} + +// OnlineStore provides a location where Feast reads and writes feature values. +// Feature values will be written to the Store in the form of FeatureRow elements. +// The way FeatureRow is encoded and decoded when it is written to and read from +// the Store depends on the type of the Store. +// +type OnlineStore struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name of the store. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Type of store. + Type StoreType `protobuf:"varint,2,opt,name=type,proto3,enum=feast.core.StoreType" json:"type,omitempty"` + // Description. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *OnlineStore) Reset() { + *x = OnlineStore{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_core_OnlineStore_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OnlineStore) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OnlineStore) ProtoMessage() {} + +func (x *OnlineStore) ProtoReflect() protoreflect.Message { + mi := &file_feast_core_OnlineStore_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OnlineStore.ProtoReflect.Descriptor instead. +func (*OnlineStore) Descriptor() ([]byte, []int) { + return file_feast_core_OnlineStore_proto_rawDescGZIP(), []int{0} +} + +func (x *OnlineStore) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *OnlineStore) GetType() StoreType { + if x != nil { + return x.Type + } + return StoreType_UNSET +} + +func (x *OnlineStore) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +var File_feast_core_OnlineStore_proto protoreflect.FileDescriptor + +var file_feast_core_OnlineStore_proto_rawDesc = []byte{ + 0x0a, 0x1c, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x4f, 0x6e, 0x6c, + 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, + 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6e, 0x0a, 0x0b, 0x4f, 0x6e, + 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x2f, 0x0a, 0x09, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e, 0x53, 0x45, 0x54, + 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x49, 0x47, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x01, + 0x12, 0x09, 0x0a, 0x05, 0x52, 0x45, 0x44, 0x49, 0x53, 0x10, 0x02, 0x42, 0xbb, 0x01, 0x0a, 0x0e, + 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x42, 0x10, + 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x4e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, + 0x64, 0x70, 0x66, 0x2f, 0x6d, 0x65, 0x74, 0x65, 0x6f, 0x72, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x63, 0x61, + 0x72, 0x61, 0x6d, 0x6c, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x63, 0x6f, + 0x72, 0x65, 0xa2, 0x02, 0x03, 0x46, 0x43, 0x58, 0xaa, 0x02, 0x0a, 0x46, 0x65, 0x61, 0x73, 0x74, + 0x2e, 0x43, 0x6f, 0x72, 0x65, 0xca, 0x02, 0x0a, 0x46, 0x65, 0x61, 0x73, 0x74, 0x5c, 0x43, 0x6f, + 0x72, 0x65, 0xe2, 0x02, 0x16, 0x46, 0x65, 0x61, 0x73, 0x74, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0b, 0x46, 0x65, + 0x61, 0x73, 0x74, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_feast_core_OnlineStore_proto_rawDescOnce sync.Once + file_feast_core_OnlineStore_proto_rawDescData = file_feast_core_OnlineStore_proto_rawDesc +) + +func file_feast_core_OnlineStore_proto_rawDescGZIP() []byte { + file_feast_core_OnlineStore_proto_rawDescOnce.Do(func() { + file_feast_core_OnlineStore_proto_rawDescData = protoimpl.X.CompressGZIP(file_feast_core_OnlineStore_proto_rawDescData) + }) + return file_feast_core_OnlineStore_proto_rawDescData +} + +var file_feast_core_OnlineStore_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_feast_core_OnlineStore_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_feast_core_OnlineStore_proto_goTypes = []interface{}{ + (StoreType)(0), // 0: feast.core.StoreType + (*OnlineStore)(nil), // 1: feast.core.OnlineStore +} +var file_feast_core_OnlineStore_proto_depIdxs = []int32{ + 0, // 0: feast.core.OnlineStore.type:type_name -> feast.core.StoreType + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_feast_core_OnlineStore_proto_init() } +func file_feast_core_OnlineStore_proto_init() { + if File_feast_core_OnlineStore_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_feast_core_OnlineStore_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OnlineStore); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_feast_core_OnlineStore_proto_rawDesc, + NumEnums: 1, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_feast_core_OnlineStore_proto_goTypes, + DependencyIndexes: file_feast_core_OnlineStore_proto_depIdxs, + EnumInfos: file_feast_core_OnlineStore_proto_enumTypes, + MessageInfos: file_feast_core_OnlineStore_proto_msgTypes, + }.Build() + File_feast_core_OnlineStore_proto = out.File + file_feast_core_OnlineStore_proto_rawDesc = nil + file_feast_core_OnlineStore_proto_goTypes = nil + file_feast_core_OnlineStore_proto_depIdxs = nil +} diff --git a/plugins/extractors/caramlstore/internal/core/Value.pb.go b/plugins/extractors/caramlstore/internal/core/Value.pb.go new file mode 100644 index 000000000..76866c2a9 --- /dev/null +++ b/plugins/extractors/caramlstore/internal/core/Value.pb.go @@ -0,0 +1,1008 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc (unknown) +// source: feast/types/Value.proto + +package core + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ValueType_Enum int32 + +const ( + ValueType_INVALID ValueType_Enum = 0 + ValueType_BYTES ValueType_Enum = 1 + ValueType_STRING ValueType_Enum = 2 + ValueType_INT32 ValueType_Enum = 3 + ValueType_INT64 ValueType_Enum = 4 + ValueType_DOUBLE ValueType_Enum = 5 + ValueType_FLOAT ValueType_Enum = 6 + ValueType_BOOL ValueType_Enum = 7 + ValueType_BYTES_LIST ValueType_Enum = 11 + ValueType_STRING_LIST ValueType_Enum = 12 + ValueType_INT32_LIST ValueType_Enum = 13 + ValueType_INT64_LIST ValueType_Enum = 14 + ValueType_DOUBLE_LIST ValueType_Enum = 15 + ValueType_FLOAT_LIST ValueType_Enum = 16 + ValueType_BOOL_LIST ValueType_Enum = 17 +) + +// Enum value maps for ValueType_Enum. +var ( + ValueType_Enum_name = map[int32]string{ + 0: "INVALID", + 1: "BYTES", + 2: "STRING", + 3: "INT32", + 4: "INT64", + 5: "DOUBLE", + 6: "FLOAT", + 7: "BOOL", + 11: "BYTES_LIST", + 12: "STRING_LIST", + 13: "INT32_LIST", + 14: "INT64_LIST", + 15: "DOUBLE_LIST", + 16: "FLOAT_LIST", + 17: "BOOL_LIST", + } + ValueType_Enum_value = map[string]int32{ + "INVALID": 0, + "BYTES": 1, + "STRING": 2, + "INT32": 3, + "INT64": 4, + "DOUBLE": 5, + "FLOAT": 6, + "BOOL": 7, + "BYTES_LIST": 11, + "STRING_LIST": 12, + "INT32_LIST": 13, + "INT64_LIST": 14, + "DOUBLE_LIST": 15, + "FLOAT_LIST": 16, + "BOOL_LIST": 17, + } +) + +func (x ValueType_Enum) Enum() *ValueType_Enum { + p := new(ValueType_Enum) + *p = x + return p +} + +func (x ValueType_Enum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ValueType_Enum) Descriptor() protoreflect.EnumDescriptor { + return file_feast_types_Value_proto_enumTypes[0].Descriptor() +} + +func (ValueType_Enum) Type() protoreflect.EnumType { + return &file_feast_types_Value_proto_enumTypes[0] +} + +func (x ValueType_Enum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ValueType_Enum.Descriptor instead. +func (ValueType_Enum) EnumDescriptor() ([]byte, []int) { + return file_feast_types_Value_proto_rawDescGZIP(), []int{0, 0} +} + +type ValueType struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ValueType) Reset() { + *x = ValueType{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_types_Value_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValueType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValueType) ProtoMessage() {} + +func (x *ValueType) ProtoReflect() protoreflect.Message { + mi := &file_feast_types_Value_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValueType.ProtoReflect.Descriptor instead. +func (*ValueType) Descriptor() ([]byte, []int) { + return file_feast_types_Value_proto_rawDescGZIP(), []int{0} +} + +type Value struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ValueType is referenced by the metadata types, FeatureInfo and EntityInfo. + // The enum values do not have to match the oneof val field ids, but they should. + // + // Types that are assignable to Val: + // *Value_BytesVal + // *Value_StringVal + // *Value_Int32Val + // *Value_Int64Val + // *Value_DoubleVal + // *Value_FloatVal + // *Value_BoolVal + // *Value_BytesListVal + // *Value_StringListVal + // *Value_Int32ListVal + // *Value_Int64ListVal + // *Value_DoubleListVal + // *Value_FloatListVal + // *Value_BoolListVal + Val isValue_Val `protobuf_oneof:"val"` +} + +func (x *Value) Reset() { + *x = Value{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_types_Value_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Value) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Value) ProtoMessage() {} + +func (x *Value) ProtoReflect() protoreflect.Message { + mi := &file_feast_types_Value_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Value.ProtoReflect.Descriptor instead. +func (*Value) Descriptor() ([]byte, []int) { + return file_feast_types_Value_proto_rawDescGZIP(), []int{1} +} + +func (m *Value) GetVal() isValue_Val { + if m != nil { + return m.Val + } + return nil +} + +func (x *Value) GetBytesVal() []byte { + if x, ok := x.GetVal().(*Value_BytesVal); ok { + return x.BytesVal + } + return nil +} + +func (x *Value) GetStringVal() string { + if x, ok := x.GetVal().(*Value_StringVal); ok { + return x.StringVal + } + return "" +} + +func (x *Value) GetInt32Val() int32 { + if x, ok := x.GetVal().(*Value_Int32Val); ok { + return x.Int32Val + } + return 0 +} + +func (x *Value) GetInt64Val() int64 { + if x, ok := x.GetVal().(*Value_Int64Val); ok { + return x.Int64Val + } + return 0 +} + +func (x *Value) GetDoubleVal() float64 { + if x, ok := x.GetVal().(*Value_DoubleVal); ok { + return x.DoubleVal + } + return 0 +} + +func (x *Value) GetFloatVal() float32 { + if x, ok := x.GetVal().(*Value_FloatVal); ok { + return x.FloatVal + } + return 0 +} + +func (x *Value) GetBoolVal() bool { + if x, ok := x.GetVal().(*Value_BoolVal); ok { + return x.BoolVal + } + return false +} + +func (x *Value) GetBytesListVal() *BytesList { + if x, ok := x.GetVal().(*Value_BytesListVal); ok { + return x.BytesListVal + } + return nil +} + +func (x *Value) GetStringListVal() *StringList { + if x, ok := x.GetVal().(*Value_StringListVal); ok { + return x.StringListVal + } + return nil +} + +func (x *Value) GetInt32ListVal() *Int32List { + if x, ok := x.GetVal().(*Value_Int32ListVal); ok { + return x.Int32ListVal + } + return nil +} + +func (x *Value) GetInt64ListVal() *Int64List { + if x, ok := x.GetVal().(*Value_Int64ListVal); ok { + return x.Int64ListVal + } + return nil +} + +func (x *Value) GetDoubleListVal() *DoubleList { + if x, ok := x.GetVal().(*Value_DoubleListVal); ok { + return x.DoubleListVal + } + return nil +} + +func (x *Value) GetFloatListVal() *FloatList { + if x, ok := x.GetVal().(*Value_FloatListVal); ok { + return x.FloatListVal + } + return nil +} + +func (x *Value) GetBoolListVal() *BoolList { + if x, ok := x.GetVal().(*Value_BoolListVal); ok { + return x.BoolListVal + } + return nil +} + +type isValue_Val interface { + isValue_Val() +} + +type Value_BytesVal struct { + BytesVal []byte `protobuf:"bytes,1,opt,name=bytes_val,json=bytesVal,proto3,oneof"` +} + +type Value_StringVal struct { + StringVal string `protobuf:"bytes,2,opt,name=string_val,json=stringVal,proto3,oneof"` +} + +type Value_Int32Val struct { + Int32Val int32 `protobuf:"varint,3,opt,name=int32_val,json=int32Val,proto3,oneof"` +} + +type Value_Int64Val struct { + Int64Val int64 `protobuf:"varint,4,opt,name=int64_val,json=int64Val,proto3,oneof"` +} + +type Value_DoubleVal struct { + DoubleVal float64 `protobuf:"fixed64,5,opt,name=double_val,json=doubleVal,proto3,oneof"` +} + +type Value_FloatVal struct { + FloatVal float32 `protobuf:"fixed32,6,opt,name=float_val,json=floatVal,proto3,oneof"` +} + +type Value_BoolVal struct { + BoolVal bool `protobuf:"varint,7,opt,name=bool_val,json=boolVal,proto3,oneof"` +} + +type Value_BytesListVal struct { + BytesListVal *BytesList `protobuf:"bytes,11,opt,name=bytes_list_val,json=bytesListVal,proto3,oneof"` +} + +type Value_StringListVal struct { + StringListVal *StringList `protobuf:"bytes,12,opt,name=string_list_val,json=stringListVal,proto3,oneof"` +} + +type Value_Int32ListVal struct { + Int32ListVal *Int32List `protobuf:"bytes,13,opt,name=int32_list_val,json=int32ListVal,proto3,oneof"` +} + +type Value_Int64ListVal struct { + Int64ListVal *Int64List `protobuf:"bytes,14,opt,name=int64_list_val,json=int64ListVal,proto3,oneof"` +} + +type Value_DoubleListVal struct { + DoubleListVal *DoubleList `protobuf:"bytes,15,opt,name=double_list_val,json=doubleListVal,proto3,oneof"` +} + +type Value_FloatListVal struct { + FloatListVal *FloatList `protobuf:"bytes,16,opt,name=float_list_val,json=floatListVal,proto3,oneof"` +} + +type Value_BoolListVal struct { + BoolListVal *BoolList `protobuf:"bytes,17,opt,name=bool_list_val,json=boolListVal,proto3,oneof"` +} + +func (*Value_BytesVal) isValue_Val() {} + +func (*Value_StringVal) isValue_Val() {} + +func (*Value_Int32Val) isValue_Val() {} + +func (*Value_Int64Val) isValue_Val() {} + +func (*Value_DoubleVal) isValue_Val() {} + +func (*Value_FloatVal) isValue_Val() {} + +func (*Value_BoolVal) isValue_Val() {} + +func (*Value_BytesListVal) isValue_Val() {} + +func (*Value_StringListVal) isValue_Val() {} + +func (*Value_Int32ListVal) isValue_Val() {} + +func (*Value_Int64ListVal) isValue_Val() {} + +func (*Value_DoubleListVal) isValue_Val() {} + +func (*Value_FloatListVal) isValue_Val() {} + +func (*Value_BoolListVal) isValue_Val() {} + +type BytesList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Val [][]byte `protobuf:"bytes,1,rep,name=val,proto3" json:"val,omitempty"` +} + +func (x *BytesList) Reset() { + *x = BytesList{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_types_Value_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BytesList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BytesList) ProtoMessage() {} + +func (x *BytesList) ProtoReflect() protoreflect.Message { + mi := &file_feast_types_Value_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BytesList.ProtoReflect.Descriptor instead. +func (*BytesList) Descriptor() ([]byte, []int) { + return file_feast_types_Value_proto_rawDescGZIP(), []int{2} +} + +func (x *BytesList) GetVal() [][]byte { + if x != nil { + return x.Val + } + return nil +} + +type StringList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Val []string `protobuf:"bytes,1,rep,name=val,proto3" json:"val,omitempty"` +} + +func (x *StringList) Reset() { + *x = StringList{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_types_Value_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StringList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StringList) ProtoMessage() {} + +func (x *StringList) ProtoReflect() protoreflect.Message { + mi := &file_feast_types_Value_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StringList.ProtoReflect.Descriptor instead. +func (*StringList) Descriptor() ([]byte, []int) { + return file_feast_types_Value_proto_rawDescGZIP(), []int{3} +} + +func (x *StringList) GetVal() []string { + if x != nil { + return x.Val + } + return nil +} + +type Int32List struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Val []int32 `protobuf:"varint,1,rep,packed,name=val,proto3" json:"val,omitempty"` +} + +func (x *Int32List) Reset() { + *x = Int32List{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_types_Value_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Int32List) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Int32List) ProtoMessage() {} + +func (x *Int32List) ProtoReflect() protoreflect.Message { + mi := &file_feast_types_Value_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Int32List.ProtoReflect.Descriptor instead. +func (*Int32List) Descriptor() ([]byte, []int) { + return file_feast_types_Value_proto_rawDescGZIP(), []int{4} +} + +func (x *Int32List) GetVal() []int32 { + if x != nil { + return x.Val + } + return nil +} + +type Int64List struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Val []int64 `protobuf:"varint,1,rep,packed,name=val,proto3" json:"val,omitempty"` +} + +func (x *Int64List) Reset() { + *x = Int64List{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_types_Value_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Int64List) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Int64List) ProtoMessage() {} + +func (x *Int64List) ProtoReflect() protoreflect.Message { + mi := &file_feast_types_Value_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Int64List.ProtoReflect.Descriptor instead. +func (*Int64List) Descriptor() ([]byte, []int) { + return file_feast_types_Value_proto_rawDescGZIP(), []int{5} +} + +func (x *Int64List) GetVal() []int64 { + if x != nil { + return x.Val + } + return nil +} + +type DoubleList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Val []float64 `protobuf:"fixed64,1,rep,packed,name=val,proto3" json:"val,omitempty"` +} + +func (x *DoubleList) Reset() { + *x = DoubleList{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_types_Value_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DoubleList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DoubleList) ProtoMessage() {} + +func (x *DoubleList) ProtoReflect() protoreflect.Message { + mi := &file_feast_types_Value_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DoubleList.ProtoReflect.Descriptor instead. +func (*DoubleList) Descriptor() ([]byte, []int) { + return file_feast_types_Value_proto_rawDescGZIP(), []int{6} +} + +func (x *DoubleList) GetVal() []float64 { + if x != nil { + return x.Val + } + return nil +} + +type FloatList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Val []float32 `protobuf:"fixed32,1,rep,packed,name=val,proto3" json:"val,omitempty"` +} + +func (x *FloatList) Reset() { + *x = FloatList{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_types_Value_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FloatList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FloatList) ProtoMessage() {} + +func (x *FloatList) ProtoReflect() protoreflect.Message { + mi := &file_feast_types_Value_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FloatList.ProtoReflect.Descriptor instead. +func (*FloatList) Descriptor() ([]byte, []int) { + return file_feast_types_Value_proto_rawDescGZIP(), []int{7} +} + +func (x *FloatList) GetVal() []float32 { + if x != nil { + return x.Val + } + return nil +} + +type BoolList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Val []bool `protobuf:"varint,1,rep,packed,name=val,proto3" json:"val,omitempty"` +} + +func (x *BoolList) Reset() { + *x = BoolList{} + if protoimpl.UnsafeEnabled { + mi := &file_feast_types_Value_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BoolList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BoolList) ProtoMessage() {} + +func (x *BoolList) ProtoReflect() protoreflect.Message { + mi := &file_feast_types_Value_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BoolList.ProtoReflect.Descriptor instead. +func (*BoolList) Descriptor() ([]byte, []int) { + return file_feast_types_Value_proto_rawDescGZIP(), []int{8} +} + +func (x *BoolList) GetVal() []bool { + if x != nil { + return x.Val + } + return nil +} + +var File_feast_types_Value_proto protoreflect.FileDescriptor + +var file_feast_types_Value_proto_rawDesc = []byte{ + 0x0a, 0x17, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x66, 0x65, 0x61, 0x73, 0x74, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x22, 0xd2, 0x01, 0x0a, 0x04, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x0b, 0x0a, + 0x07, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, + 0x54, 0x45, 0x53, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, + 0x02, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, + 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x55, 0x42, 0x4c, + 0x45, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x06, 0x12, 0x08, + 0x0a, 0x04, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x07, 0x12, 0x0e, 0x0a, 0x0a, 0x42, 0x59, 0x54, 0x45, + 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x0b, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x52, 0x49, + 0x4e, 0x47, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x0c, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x54, + 0x33, 0x32, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x0d, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x54, + 0x36, 0x34, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x0e, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x4f, 0x55, + 0x42, 0x4c, 0x45, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x0f, 0x12, 0x0e, 0x0a, 0x0a, 0x46, 0x4c, + 0x4f, 0x41, 0x54, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x10, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4f, + 0x4f, 0x4c, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x11, 0x22, 0xac, 0x05, 0x0a, 0x05, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, + 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, + 0x6c, 0x12, 0x1f, 0x0a, 0x0a, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x09, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, + 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x08, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, + 0x6c, 0x12, 0x1b, 0x0a, 0x08, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x07, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x12, 0x3e, + 0x0a, 0x0e, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, + 0x52, 0x0c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x12, 0x41, + 0x0a, 0x0f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, + 0x48, 0x00, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, + 0x6c, 0x12, 0x3e, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, + 0x6c, 0x12, 0x3e, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, 0x65, 0x61, 0x73, + 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, + 0x74, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, + 0x6c, 0x12, 0x41, 0x0a, 0x0f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x66, 0x65, 0x61, + 0x73, 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x56, 0x61, 0x6c, 0x12, 0x3e, 0x0a, 0x0e, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x6c, 0x69, + 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x66, + 0x65, 0x61, 0x73, 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x56, 0x61, 0x6c, 0x12, 0x3b, 0x0a, 0x0d, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x6c, 0x69, 0x73, + 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x66, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x62, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, + 0x6c, 0x42, 0x05, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x1d, 0x0a, 0x09, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0c, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x1e, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x1d, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x33, 0x32, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x05, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x1d, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, + 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x1e, 0x0a, 0x0a, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x01, + 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x1d, 0x0a, 0x09, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x02, 0x52, + 0x03, 0x76, 0x61, 0x6c, 0x22, 0x1c, 0x0a, 0x08, 0x42, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x08, 0x52, 0x03, 0x76, + 0x61, 0x6c, 0x42, 0xbb, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x66, 0x65, 0x61, 0x73, 0x74, + 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x42, 0x0a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6f, 0x64, 0x70, 0x66, 0x2f, 0x6d, 0x65, 0x74, 0x65, 0x6f, 0x72, 0x2f, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2f, + 0x63, 0x61, 0x72, 0x61, 0x6d, 0x6c, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0xa2, 0x02, 0x03, 0x46, 0x54, 0x58, 0xaa, 0x02, 0x0b, 0x46, 0x65, + 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x73, 0xca, 0x02, 0x0b, 0x46, 0x65, 0x61, 0x73, + 0x74, 0x5c, 0x54, 0x79, 0x70, 0x65, 0x73, 0xe2, 0x02, 0x17, 0x46, 0x65, 0x61, 0x73, 0x74, 0x5c, + 0x54, 0x79, 0x70, 0x65, 0x73, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x0c, 0x46, 0x65, 0x61, 0x73, 0x74, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_feast_types_Value_proto_rawDescOnce sync.Once + file_feast_types_Value_proto_rawDescData = file_feast_types_Value_proto_rawDesc +) + +func file_feast_types_Value_proto_rawDescGZIP() []byte { + file_feast_types_Value_proto_rawDescOnce.Do(func() { + file_feast_types_Value_proto_rawDescData = protoimpl.X.CompressGZIP(file_feast_types_Value_proto_rawDescData) + }) + return file_feast_types_Value_proto_rawDescData +} + +var file_feast_types_Value_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_feast_types_Value_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_feast_types_Value_proto_goTypes = []interface{}{ + (ValueType_Enum)(0), // 0: feast.types.ValueType.Enum + (*ValueType)(nil), // 1: feast.types.ValueType + (*Value)(nil), // 2: feast.types.Value + (*BytesList)(nil), // 3: feast.types.BytesList + (*StringList)(nil), // 4: feast.types.StringList + (*Int32List)(nil), // 5: feast.types.Int32List + (*Int64List)(nil), // 6: feast.types.Int64List + (*DoubleList)(nil), // 7: feast.types.DoubleList + (*FloatList)(nil), // 8: feast.types.FloatList + (*BoolList)(nil), // 9: feast.types.BoolList +} +var file_feast_types_Value_proto_depIdxs = []int32{ + 3, // 0: feast.types.Value.bytes_list_val:type_name -> feast.types.BytesList + 4, // 1: feast.types.Value.string_list_val:type_name -> feast.types.StringList + 5, // 2: feast.types.Value.int32_list_val:type_name -> feast.types.Int32List + 6, // 3: feast.types.Value.int64_list_val:type_name -> feast.types.Int64List + 7, // 4: feast.types.Value.double_list_val:type_name -> feast.types.DoubleList + 8, // 5: feast.types.Value.float_list_val:type_name -> feast.types.FloatList + 9, // 6: feast.types.Value.bool_list_val:type_name -> feast.types.BoolList + 7, // [7:7] is the sub-list for method output_type + 7, // [7:7] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name +} + +func init() { file_feast_types_Value_proto_init() } +func file_feast_types_Value_proto_init() { + if File_feast_types_Value_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_feast_types_Value_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValueType); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_types_Value_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Value); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_types_Value_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BytesList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_types_Value_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StringList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_types_Value_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Int32List); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_types_Value_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Int64List); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_types_Value_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DoubleList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_types_Value_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FloatList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_feast_types_Value_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BoolList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_feast_types_Value_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*Value_BytesVal)(nil), + (*Value_StringVal)(nil), + (*Value_Int32Val)(nil), + (*Value_Int64Val)(nil), + (*Value_DoubleVal)(nil), + (*Value_FloatVal)(nil), + (*Value_BoolVal)(nil), + (*Value_BytesListVal)(nil), + (*Value_StringListVal)(nil), + (*Value_Int32ListVal)(nil), + (*Value_Int64ListVal)(nil), + (*Value_DoubleListVal)(nil), + (*Value_FloatListVal)(nil), + (*Value_BoolListVal)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_feast_types_Value_proto_rawDesc, + NumEnums: 1, + NumMessages: 9, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_feast_types_Value_proto_goTypes, + DependencyIndexes: file_feast_types_Value_proto_depIdxs, + EnumInfos: file_feast_types_Value_proto_enumTypes, + MessageInfos: file_feast_types_Value_proto_msgTypes, + }.Build() + File_feast_types_Value_proto = out.File + file_feast_types_Value_proto_rawDesc = nil + file_feast_types_Value_proto_goTypes = nil + file_feast_types_Value_proto_depIdxs = nil +} diff --git a/plugins/extractors/caramlstore/internal/gen.go b/plugins/extractors/caramlstore/internal/gen.go new file mode 100644 index 000000000..2ecdc8c09 --- /dev/null +++ b/plugins/extractors/caramlstore/internal/gen.go @@ -0,0 +1,3 @@ +package internal + +//go:generate mockery --name=CoreServiceServer -r --case underscore --with-expecter --structname CoreServer --filename core_server_mock.go --output=./mocks diff --git a/plugins/extractors/caramlstore/internal/mocks/caraml_client_mock.go b/plugins/extractors/caramlstore/internal/mocks/caraml_client_mock.go new file mode 100644 index 000000000..0191e4181 --- /dev/null +++ b/plugins/extractors/caramlstore/internal/mocks/caraml_client_mock.go @@ -0,0 +1,256 @@ +// Code generated by mockery v2.14.0. DO NOT EDIT. + +package mocks + +import ( + context "context" + + core "github.com/odpf/meteor/plugins/extractors/caramlstore/internal/core" + mock "github.com/stretchr/testify/mock" + + time "time" +) + +// CaraMLClient is an autogenerated mock type for the Client type +type CaraMLClient struct { + mock.Mock +} + +type CaraMLClient_Expecter struct { + mock *mock.Mock +} + +func (_m *CaraMLClient) EXPECT() *CaraMLClient_Expecter { + return &CaraMLClient_Expecter{mock: &_m.Mock} +} + +// Close provides a mock function with given fields: +func (_m *CaraMLClient) Close() error { + ret := _m.Called() + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// CaraMLClient_Close_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Close' +type CaraMLClient_Close_Call struct { + *mock.Call +} + +// Close is a helper method to define mock.On call +func (_e *CaraMLClient_Expecter) Close() *CaraMLClient_Close_Call { + return &CaraMLClient_Close_Call{Call: _e.mock.On("Close")} +} + +func (_c *CaraMLClient_Close_Call) Run(run func()) *CaraMLClient_Close_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *CaraMLClient_Close_Call) Return(_a0 error) *CaraMLClient_Close_Call { + _c.Call.Return(_a0) + return _c +} + +// Connect provides a mock function with given fields: ctx, host, maxSizeInMB, timeout +func (_m *CaraMLClient) Connect(ctx context.Context, host string, maxSizeInMB int, timeout time.Duration) error { + ret := _m.Called(ctx, host, maxSizeInMB, timeout) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string, int, time.Duration) error); ok { + r0 = rf(ctx, host, maxSizeInMB, timeout) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// CaraMLClient_Connect_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Connect' +type CaraMLClient_Connect_Call struct { + *mock.Call +} + +// Connect is a helper method to define mock.On call +// - ctx context.Context +// - host string +// - maxSizeInMB int +// - timeout time.Duration +func (_e *CaraMLClient_Expecter) Connect(ctx interface{}, host interface{}, maxSizeInMB interface{}, timeout interface{}) *CaraMLClient_Connect_Call { + return &CaraMLClient_Connect_Call{Call: _e.mock.On("Connect", ctx, host, maxSizeInMB, timeout)} +} + +func (_c *CaraMLClient_Connect_Call) Run(run func(ctx context.Context, host string, maxSizeInMB int, timeout time.Duration)) *CaraMLClient_Connect_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string), args[2].(int), args[3].(time.Duration)) + }) + return _c +} + +func (_c *CaraMLClient_Connect_Call) Return(_a0 error) *CaraMLClient_Connect_Call { + _c.Call.Return(_a0) + return _c +} + +// Entities provides a mock function with given fields: ctx, project +func (_m *CaraMLClient) Entities(ctx context.Context, project string) (map[string]*core.Entity, error) { + ret := _m.Called(ctx, project) + + var r0 map[string]*core.Entity + if rf, ok := ret.Get(0).(func(context.Context, string) map[string]*core.Entity); ok { + r0 = rf(ctx, project) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[string]*core.Entity) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, project) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CaraMLClient_Entities_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Entities' +type CaraMLClient_Entities_Call struct { + *mock.Call +} + +// Entities is a helper method to define mock.On call +// - ctx context.Context +// - project string +func (_e *CaraMLClient_Expecter) Entities(ctx interface{}, project interface{}) *CaraMLClient_Entities_Call { + return &CaraMLClient_Entities_Call{Call: _e.mock.On("Entities", ctx, project)} +} + +func (_c *CaraMLClient_Entities_Call) Run(run func(ctx context.Context, project string)) *CaraMLClient_Entities_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string)) + }) + return _c +} + +func (_c *CaraMLClient_Entities_Call) Return(_a0 map[string]*core.Entity, _a1 error) *CaraMLClient_Entities_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// FeatureTables provides a mock function with given fields: ctx, project +func (_m *CaraMLClient) FeatureTables(ctx context.Context, project string) ([]*core.FeatureTable, error) { + ret := _m.Called(ctx, project) + + var r0 []*core.FeatureTable + if rf, ok := ret.Get(0).(func(context.Context, string) []*core.FeatureTable); ok { + r0 = rf(ctx, project) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]*core.FeatureTable) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, project) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CaraMLClient_FeatureTables_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'FeatureTables' +type CaraMLClient_FeatureTables_Call struct { + *mock.Call +} + +// FeatureTables is a helper method to define mock.On call +// - ctx context.Context +// - project string +func (_e *CaraMLClient_Expecter) FeatureTables(ctx interface{}, project interface{}) *CaraMLClient_FeatureTables_Call { + return &CaraMLClient_FeatureTables_Call{Call: _e.mock.On("FeatureTables", ctx, project)} +} + +func (_c *CaraMLClient_FeatureTables_Call) Run(run func(ctx context.Context, project string)) *CaraMLClient_FeatureTables_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(string)) + }) + return _c +} + +func (_c *CaraMLClient_FeatureTables_Call) Return(_a0 []*core.FeatureTable, _a1 error) *CaraMLClient_FeatureTables_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// Projects provides a mock function with given fields: ctx +func (_m *CaraMLClient) Projects(ctx context.Context) ([]string, error) { + ret := _m.Called(ctx) + + var r0 []string + if rf, ok := ret.Get(0).(func(context.Context) []string); ok { + r0 = rf(ctx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]string) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(ctx) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CaraMLClient_Projects_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Projects' +type CaraMLClient_Projects_Call struct { + *mock.Call +} + +// Projects is a helper method to define mock.On call +// - ctx context.Context +func (_e *CaraMLClient_Expecter) Projects(ctx interface{}) *CaraMLClient_Projects_Call { + return &CaraMLClient_Projects_Call{Call: _e.mock.On("Projects", ctx)} +} + +func (_c *CaraMLClient_Projects_Call) Run(run func(ctx context.Context)) *CaraMLClient_Projects_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context)) + }) + return _c +} + +func (_c *CaraMLClient_Projects_Call) Return(_a0 []string, _a1 error) *CaraMLClient_Projects_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +type mockConstructorTestingTNewCaraMLClient interface { + mock.TestingT + Cleanup(func()) +} + +// NewCaraMLClient creates a new instance of CaraMLClient. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewCaraMLClient(t mockConstructorTestingTNewCaraMLClient) *CaraMLClient { + mock := &CaraMLClient{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/plugins/extractors/caramlstore/internal/mocks/core_server_mock.go b/plugins/extractors/caramlstore/internal/mocks/core_server_mock.go new file mode 100644 index 000000000..a2d3e35c5 --- /dev/null +++ b/plugins/extractors/caramlstore/internal/mocks/core_server_mock.go @@ -0,0 +1,790 @@ +// Code generated by mockery v2.14.0. DO NOT EDIT. + +package mocks + +import ( + context "context" + + core "github.com/odpf/meteor/plugins/extractors/caramlstore/internal/core" + mock "github.com/stretchr/testify/mock" +) + +// CoreServer is an autogenerated mock type for the CoreServiceServer type +type CoreServer struct { + mock.Mock +} + +type CoreServer_Expecter struct { + mock *mock.Mock +} + +func (_m *CoreServer) EXPECT() *CoreServer_Expecter { + return &CoreServer_Expecter{mock: &_m.Mock} +} + +// ApplyEntity provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) ApplyEntity(_a0 context.Context, _a1 *core.ApplyEntityRequest) (*core.ApplyEntityResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.ApplyEntityResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.ApplyEntityRequest) *core.ApplyEntityResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.ApplyEntityResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.ApplyEntityRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_ApplyEntity_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ApplyEntity' +type CoreServer_ApplyEntity_Call struct { + *mock.Call +} + +// ApplyEntity is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.ApplyEntityRequest +func (_e *CoreServer_Expecter) ApplyEntity(_a0 interface{}, _a1 interface{}) *CoreServer_ApplyEntity_Call { + return &CoreServer_ApplyEntity_Call{Call: _e.mock.On("ApplyEntity", _a0, _a1)} +} + +func (_c *CoreServer_ApplyEntity_Call) Run(run func(_a0 context.Context, _a1 *core.ApplyEntityRequest)) *CoreServer_ApplyEntity_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.ApplyEntityRequest)) + }) + return _c +} + +func (_c *CoreServer_ApplyEntity_Call) Return(_a0 *core.ApplyEntityResponse, _a1 error) *CoreServer_ApplyEntity_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ApplyFeatureTable provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) ApplyFeatureTable(_a0 context.Context, _a1 *core.ApplyFeatureTableRequest) (*core.ApplyFeatureTableResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.ApplyFeatureTableResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.ApplyFeatureTableRequest) *core.ApplyFeatureTableResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.ApplyFeatureTableResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.ApplyFeatureTableRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_ApplyFeatureTable_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ApplyFeatureTable' +type CoreServer_ApplyFeatureTable_Call struct { + *mock.Call +} + +// ApplyFeatureTable is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.ApplyFeatureTableRequest +func (_e *CoreServer_Expecter) ApplyFeatureTable(_a0 interface{}, _a1 interface{}) *CoreServer_ApplyFeatureTable_Call { + return &CoreServer_ApplyFeatureTable_Call{Call: _e.mock.On("ApplyFeatureTable", _a0, _a1)} +} + +func (_c *CoreServer_ApplyFeatureTable_Call) Run(run func(_a0 context.Context, _a1 *core.ApplyFeatureTableRequest)) *CoreServer_ApplyFeatureTable_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.ApplyFeatureTableRequest)) + }) + return _c +} + +func (_c *CoreServer_ApplyFeatureTable_Call) Return(_a0 *core.ApplyFeatureTableResponse, _a1 error) *CoreServer_ApplyFeatureTable_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ArchiveOnlineStore provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) ArchiveOnlineStore(_a0 context.Context, _a1 *core.ArchiveOnlineStoreRequest) (*core.ArchiveOnlineStoreResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.ArchiveOnlineStoreResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.ArchiveOnlineStoreRequest) *core.ArchiveOnlineStoreResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.ArchiveOnlineStoreResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.ArchiveOnlineStoreRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_ArchiveOnlineStore_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ArchiveOnlineStore' +type CoreServer_ArchiveOnlineStore_Call struct { + *mock.Call +} + +// ArchiveOnlineStore is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.ArchiveOnlineStoreRequest +func (_e *CoreServer_Expecter) ArchiveOnlineStore(_a0 interface{}, _a1 interface{}) *CoreServer_ArchiveOnlineStore_Call { + return &CoreServer_ArchiveOnlineStore_Call{Call: _e.mock.On("ArchiveOnlineStore", _a0, _a1)} +} + +func (_c *CoreServer_ArchiveOnlineStore_Call) Run(run func(_a0 context.Context, _a1 *core.ArchiveOnlineStoreRequest)) *CoreServer_ArchiveOnlineStore_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.ArchiveOnlineStoreRequest)) + }) + return _c +} + +func (_c *CoreServer_ArchiveOnlineStore_Call) Return(_a0 *core.ArchiveOnlineStoreResponse, _a1 error) *CoreServer_ArchiveOnlineStore_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ArchiveProject provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) ArchiveProject(_a0 context.Context, _a1 *core.ArchiveProjectRequest) (*core.ArchiveProjectResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.ArchiveProjectResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.ArchiveProjectRequest) *core.ArchiveProjectResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.ArchiveProjectResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.ArchiveProjectRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_ArchiveProject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ArchiveProject' +type CoreServer_ArchiveProject_Call struct { + *mock.Call +} + +// ArchiveProject is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.ArchiveProjectRequest +func (_e *CoreServer_Expecter) ArchiveProject(_a0 interface{}, _a1 interface{}) *CoreServer_ArchiveProject_Call { + return &CoreServer_ArchiveProject_Call{Call: _e.mock.On("ArchiveProject", _a0, _a1)} +} + +func (_c *CoreServer_ArchiveProject_Call) Run(run func(_a0 context.Context, _a1 *core.ArchiveProjectRequest)) *CoreServer_ArchiveProject_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.ArchiveProjectRequest)) + }) + return _c +} + +func (_c *CoreServer_ArchiveProject_Call) Return(_a0 *core.ArchiveProjectResponse, _a1 error) *CoreServer_ArchiveProject_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// CreateProject provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) CreateProject(_a0 context.Context, _a1 *core.CreateProjectRequest) (*core.CreateProjectResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.CreateProjectResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.CreateProjectRequest) *core.CreateProjectResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.CreateProjectResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.CreateProjectRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_CreateProject_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateProject' +type CoreServer_CreateProject_Call struct { + *mock.Call +} + +// CreateProject is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.CreateProjectRequest +func (_e *CoreServer_Expecter) CreateProject(_a0 interface{}, _a1 interface{}) *CoreServer_CreateProject_Call { + return &CoreServer_CreateProject_Call{Call: _e.mock.On("CreateProject", _a0, _a1)} +} + +func (_c *CoreServer_CreateProject_Call) Run(run func(_a0 context.Context, _a1 *core.CreateProjectRequest)) *CoreServer_CreateProject_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.CreateProjectRequest)) + }) + return _c +} + +func (_c *CoreServer_CreateProject_Call) Return(_a0 *core.CreateProjectResponse, _a1 error) *CoreServer_CreateProject_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// DeleteFeatureTable provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) DeleteFeatureTable(_a0 context.Context, _a1 *core.DeleteFeatureTableRequest) (*core.DeleteFeatureTableResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.DeleteFeatureTableResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.DeleteFeatureTableRequest) *core.DeleteFeatureTableResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.DeleteFeatureTableResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.DeleteFeatureTableRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_DeleteFeatureTable_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DeleteFeatureTable' +type CoreServer_DeleteFeatureTable_Call struct { + *mock.Call +} + +// DeleteFeatureTable is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.DeleteFeatureTableRequest +func (_e *CoreServer_Expecter) DeleteFeatureTable(_a0 interface{}, _a1 interface{}) *CoreServer_DeleteFeatureTable_Call { + return &CoreServer_DeleteFeatureTable_Call{Call: _e.mock.On("DeleteFeatureTable", _a0, _a1)} +} + +func (_c *CoreServer_DeleteFeatureTable_Call) Run(run func(_a0 context.Context, _a1 *core.DeleteFeatureTableRequest)) *CoreServer_DeleteFeatureTable_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.DeleteFeatureTableRequest)) + }) + return _c +} + +func (_c *CoreServer_DeleteFeatureTable_Call) Return(_a0 *core.DeleteFeatureTableResponse, _a1 error) *CoreServer_DeleteFeatureTable_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetEntity provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) GetEntity(_a0 context.Context, _a1 *core.GetEntityRequest) (*core.GetEntityResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.GetEntityResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.GetEntityRequest) *core.GetEntityResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.GetEntityResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.GetEntityRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_GetEntity_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetEntity' +type CoreServer_GetEntity_Call struct { + *mock.Call +} + +// GetEntity is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.GetEntityRequest +func (_e *CoreServer_Expecter) GetEntity(_a0 interface{}, _a1 interface{}) *CoreServer_GetEntity_Call { + return &CoreServer_GetEntity_Call{Call: _e.mock.On("GetEntity", _a0, _a1)} +} + +func (_c *CoreServer_GetEntity_Call) Run(run func(_a0 context.Context, _a1 *core.GetEntityRequest)) *CoreServer_GetEntity_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.GetEntityRequest)) + }) + return _c +} + +func (_c *CoreServer_GetEntity_Call) Return(_a0 *core.GetEntityResponse, _a1 error) *CoreServer_GetEntity_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetFeastCoreVersion provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) GetFeastCoreVersion(_a0 context.Context, _a1 *core.GetFeastCoreVersionRequest) (*core.GetFeastCoreVersionResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.GetFeastCoreVersionResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.GetFeastCoreVersionRequest) *core.GetFeastCoreVersionResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.GetFeastCoreVersionResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.GetFeastCoreVersionRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_GetFeastCoreVersion_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetFeastCoreVersion' +type CoreServer_GetFeastCoreVersion_Call struct { + *mock.Call +} + +// GetFeastCoreVersion is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.GetFeastCoreVersionRequest +func (_e *CoreServer_Expecter) GetFeastCoreVersion(_a0 interface{}, _a1 interface{}) *CoreServer_GetFeastCoreVersion_Call { + return &CoreServer_GetFeastCoreVersion_Call{Call: _e.mock.On("GetFeastCoreVersion", _a0, _a1)} +} + +func (_c *CoreServer_GetFeastCoreVersion_Call) Run(run func(_a0 context.Context, _a1 *core.GetFeastCoreVersionRequest)) *CoreServer_GetFeastCoreVersion_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.GetFeastCoreVersionRequest)) + }) + return _c +} + +func (_c *CoreServer_GetFeastCoreVersion_Call) Return(_a0 *core.GetFeastCoreVersionResponse, _a1 error) *CoreServer_GetFeastCoreVersion_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetFeatureTable provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) GetFeatureTable(_a0 context.Context, _a1 *core.GetFeatureTableRequest) (*core.GetFeatureTableResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.GetFeatureTableResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.GetFeatureTableRequest) *core.GetFeatureTableResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.GetFeatureTableResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.GetFeatureTableRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_GetFeatureTable_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetFeatureTable' +type CoreServer_GetFeatureTable_Call struct { + *mock.Call +} + +// GetFeatureTable is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.GetFeatureTableRequest +func (_e *CoreServer_Expecter) GetFeatureTable(_a0 interface{}, _a1 interface{}) *CoreServer_GetFeatureTable_Call { + return &CoreServer_GetFeatureTable_Call{Call: _e.mock.On("GetFeatureTable", _a0, _a1)} +} + +func (_c *CoreServer_GetFeatureTable_Call) Run(run func(_a0 context.Context, _a1 *core.GetFeatureTableRequest)) *CoreServer_GetFeatureTable_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.GetFeatureTableRequest)) + }) + return _c +} + +func (_c *CoreServer_GetFeatureTable_Call) Return(_a0 *core.GetFeatureTableResponse, _a1 error) *CoreServer_GetFeatureTable_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// GetOnlineStore provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) GetOnlineStore(_a0 context.Context, _a1 *core.GetOnlineStoreRequest) (*core.GetOnlineStoreResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.GetOnlineStoreResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.GetOnlineStoreRequest) *core.GetOnlineStoreResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.GetOnlineStoreResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.GetOnlineStoreRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_GetOnlineStore_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetOnlineStore' +type CoreServer_GetOnlineStore_Call struct { + *mock.Call +} + +// GetOnlineStore is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.GetOnlineStoreRequest +func (_e *CoreServer_Expecter) GetOnlineStore(_a0 interface{}, _a1 interface{}) *CoreServer_GetOnlineStore_Call { + return &CoreServer_GetOnlineStore_Call{Call: _e.mock.On("GetOnlineStore", _a0, _a1)} +} + +func (_c *CoreServer_GetOnlineStore_Call) Run(run func(_a0 context.Context, _a1 *core.GetOnlineStoreRequest)) *CoreServer_GetOnlineStore_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.GetOnlineStoreRequest)) + }) + return _c +} + +func (_c *CoreServer_GetOnlineStore_Call) Return(_a0 *core.GetOnlineStoreResponse, _a1 error) *CoreServer_GetOnlineStore_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ListEntities provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) ListEntities(_a0 context.Context, _a1 *core.ListEntitiesRequest) (*core.ListEntitiesResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.ListEntitiesResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.ListEntitiesRequest) *core.ListEntitiesResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.ListEntitiesResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.ListEntitiesRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_ListEntities_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListEntities' +type CoreServer_ListEntities_Call struct { + *mock.Call +} + +// ListEntities is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.ListEntitiesRequest +func (_e *CoreServer_Expecter) ListEntities(_a0 interface{}, _a1 interface{}) *CoreServer_ListEntities_Call { + return &CoreServer_ListEntities_Call{Call: _e.mock.On("ListEntities", _a0, _a1)} +} + +func (_c *CoreServer_ListEntities_Call) Run(run func(_a0 context.Context, _a1 *core.ListEntitiesRequest)) *CoreServer_ListEntities_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.ListEntitiesRequest)) + }) + return _c +} + +func (_c *CoreServer_ListEntities_Call) Return(_a0 *core.ListEntitiesResponse, _a1 error) *CoreServer_ListEntities_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ListFeatureTables provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) ListFeatureTables(_a0 context.Context, _a1 *core.ListFeatureTablesRequest) (*core.ListFeatureTablesResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.ListFeatureTablesResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.ListFeatureTablesRequest) *core.ListFeatureTablesResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.ListFeatureTablesResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.ListFeatureTablesRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_ListFeatureTables_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListFeatureTables' +type CoreServer_ListFeatureTables_Call struct { + *mock.Call +} + +// ListFeatureTables is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.ListFeatureTablesRequest +func (_e *CoreServer_Expecter) ListFeatureTables(_a0 interface{}, _a1 interface{}) *CoreServer_ListFeatureTables_Call { + return &CoreServer_ListFeatureTables_Call{Call: _e.mock.On("ListFeatureTables", _a0, _a1)} +} + +func (_c *CoreServer_ListFeatureTables_Call) Run(run func(_a0 context.Context, _a1 *core.ListFeatureTablesRequest)) *CoreServer_ListFeatureTables_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.ListFeatureTablesRequest)) + }) + return _c +} + +func (_c *CoreServer_ListFeatureTables_Call) Return(_a0 *core.ListFeatureTablesResponse, _a1 error) *CoreServer_ListFeatureTables_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ListFeatures provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) ListFeatures(_a0 context.Context, _a1 *core.ListFeaturesRequest) (*core.ListFeaturesResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.ListFeaturesResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.ListFeaturesRequest) *core.ListFeaturesResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.ListFeaturesResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.ListFeaturesRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_ListFeatures_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListFeatures' +type CoreServer_ListFeatures_Call struct { + *mock.Call +} + +// ListFeatures is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.ListFeaturesRequest +func (_e *CoreServer_Expecter) ListFeatures(_a0 interface{}, _a1 interface{}) *CoreServer_ListFeatures_Call { + return &CoreServer_ListFeatures_Call{Call: _e.mock.On("ListFeatures", _a0, _a1)} +} + +func (_c *CoreServer_ListFeatures_Call) Run(run func(_a0 context.Context, _a1 *core.ListFeaturesRequest)) *CoreServer_ListFeatures_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.ListFeaturesRequest)) + }) + return _c +} + +func (_c *CoreServer_ListFeatures_Call) Return(_a0 *core.ListFeaturesResponse, _a1 error) *CoreServer_ListFeatures_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ListOnlineStores provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) ListOnlineStores(_a0 context.Context, _a1 *core.ListOnlineStoresRequest) (*core.ListOnlineStoresResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.ListOnlineStoresResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.ListOnlineStoresRequest) *core.ListOnlineStoresResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.ListOnlineStoresResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.ListOnlineStoresRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_ListOnlineStores_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListOnlineStores' +type CoreServer_ListOnlineStores_Call struct { + *mock.Call +} + +// ListOnlineStores is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.ListOnlineStoresRequest +func (_e *CoreServer_Expecter) ListOnlineStores(_a0 interface{}, _a1 interface{}) *CoreServer_ListOnlineStores_Call { + return &CoreServer_ListOnlineStores_Call{Call: _e.mock.On("ListOnlineStores", _a0, _a1)} +} + +func (_c *CoreServer_ListOnlineStores_Call) Run(run func(_a0 context.Context, _a1 *core.ListOnlineStoresRequest)) *CoreServer_ListOnlineStores_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.ListOnlineStoresRequest)) + }) + return _c +} + +func (_c *CoreServer_ListOnlineStores_Call) Return(_a0 *core.ListOnlineStoresResponse, _a1 error) *CoreServer_ListOnlineStores_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// ListProjects provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) ListProjects(_a0 context.Context, _a1 *core.ListProjectsRequest) (*core.ListProjectsResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.ListProjectsResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.ListProjectsRequest) *core.ListProjectsResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.ListProjectsResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.ListProjectsRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_ListProjects_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListProjects' +type CoreServer_ListProjects_Call struct { + *mock.Call +} + +// ListProjects is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.ListProjectsRequest +func (_e *CoreServer_Expecter) ListProjects(_a0 interface{}, _a1 interface{}) *CoreServer_ListProjects_Call { + return &CoreServer_ListProjects_Call{Call: _e.mock.On("ListProjects", _a0, _a1)} +} + +func (_c *CoreServer_ListProjects_Call) Run(run func(_a0 context.Context, _a1 *core.ListProjectsRequest)) *CoreServer_ListProjects_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.ListProjectsRequest)) + }) + return _c +} + +func (_c *CoreServer_ListProjects_Call) Return(_a0 *core.ListProjectsResponse, _a1 error) *CoreServer_ListProjects_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +// RegisterOnlineStore provides a mock function with given fields: _a0, _a1 +func (_m *CoreServer) RegisterOnlineStore(_a0 context.Context, _a1 *core.RegisterOnlineStoreRequest) (*core.RegisterOnlineStoreResponse, error) { + ret := _m.Called(_a0, _a1) + + var r0 *core.RegisterOnlineStoreResponse + if rf, ok := ret.Get(0).(func(context.Context, *core.RegisterOnlineStoreRequest) *core.RegisterOnlineStoreResponse); ok { + r0 = rf(_a0, _a1) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*core.RegisterOnlineStoreResponse) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *core.RegisterOnlineStoreRequest) error); ok { + r1 = rf(_a0, _a1) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CoreServer_RegisterOnlineStore_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RegisterOnlineStore' +type CoreServer_RegisterOnlineStore_Call struct { + *mock.Call +} + +// RegisterOnlineStore is a helper method to define mock.On call +// - _a0 context.Context +// - _a1 *core.RegisterOnlineStoreRequest +func (_e *CoreServer_Expecter) RegisterOnlineStore(_a0 interface{}, _a1 interface{}) *CoreServer_RegisterOnlineStore_Call { + return &CoreServer_RegisterOnlineStore_Call{Call: _e.mock.On("RegisterOnlineStore", _a0, _a1)} +} + +func (_c *CoreServer_RegisterOnlineStore_Call) Run(run func(_a0 context.Context, _a1 *core.RegisterOnlineStoreRequest)) *CoreServer_RegisterOnlineStore_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].(*core.RegisterOnlineStoreRequest)) + }) + return _c +} + +func (_c *CoreServer_RegisterOnlineStore_Call) Return(_a0 *core.RegisterOnlineStoreResponse, _a1 error) *CoreServer_RegisterOnlineStore_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +type mockConstructorTestingTNewCoreServer interface { + mock.TestingT + Cleanup(func()) +} + +// NewCoreServer creates a new instance of CoreServer. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewCoreServer(t mockConstructorTestingTNewCoreServer) *CoreServer { + mock := &CoreServer{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/plugins/extractors/caramlstore/testdata/expected-assets.json b/plugins/extractors/caramlstore/testdata/expected-assets.json new file mode 100644 index 000000000..47ad61a5d --- /dev/null +++ b/plugins/extractors/caramlstore/testdata/expected-assets.json @@ -0,0 +1,274 @@ +[ + { + "urn": "urn:caramlstore:test-caramlstore:ml_feature_table:merchant_uuid_t2_discovery", + "name": "merchant_uuid_t2_discovery", + "service": "caramlstore", + "type": "ml_feature_table", + "data": { + "@type": "type.googleapis.com/odpf.assets.v1beta2.MLFeatureTable", + "namespace": "sauron", + "entities": [ + { + "name": "merchant_uuid", + "labels": { + "description": "merchant uuid", + "value_type": "STRING" + } + } + ], + "features": [ + { + "name": "avg_t2_merchant_3d", + "data_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_1d", + "data_type": "DOUBLE" + }, + { + "name": "avg_merchant_price", + "data_type": "DOUBLE" + }, + { + "name": "avg_t2_same_hour_merchant_1m", + "data_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_1w", + "data_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_1w", + "data_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_1d", + "data_type": "DOUBLE" + }, + { + "name": "merch_demand_same_hour_1m", + "data_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_3h", + "data_type": "DOUBLE" + }, + { + "name": "t2_discovery", + "data_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_3h", + "data_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_1m", + "data_type": "DOUBLE" + }, + { + "name": "avg_gmv_same_hour_merchant_1m", + "data_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_1m", + "data_type": "DOUBLE" + } + ], + "create_time": "2022-08-08T03:17:54Z", + "update_time": "2022-08-08T03:17:54Z" + }, + "lineage": { + "upstreams": [ + { + "urn": "urn:bigquery:celestial-dragons-staging:table:celestial-dragons-staging:feast.merchant_uuid_t2_discovery", + "service": "bigquery", + "type": "table" + } + ] + } + }, + { + "urn": "urn:caramlstore:test-caramlstore:ml_feature_table:avg_dispatch_arrival_time_10_mins", + "name": "avg_dispatch_arrival_time_10_mins", + "service": "caramlstore", + "type": "ml_feature_table", + "data": { + "@type": "type.googleapis.com/odpf.assets.v1beta2.MLFeatureTable", + "namespace": "sauron", + "entities": [ + { + "name": "merchant_uuid", + "labels": { + "description": "merchant uuid", + "value_type": "STRING" + } + } + ], + "features": [ + { + "name": "ongoing_placed_and_waiting_acceptance_orders", + "data_type": "INT64" + }, + { + "name": "ongoing_orders", + "data_type": "INT64" + }, + { + "name": "merchant_avg_dispatch_arrival_time_10m", + "data_type": "FLOAT" + }, + { + "name": "ongoing_accepted_orders", + "data_type": "INT64" + } + ], + "create_time": "2022-09-19T22:42:04Z", + "update_time": "2022-09-21T13:23:02Z" + }, + "lineage": { + "upstreams": [ + { + "urn": "urn:kafka:int-dagstream-kafka.yonkou.io:topic:GO_FOOD-delay-allocation-merchant-feature-10m-log", + "service": "kafka", + "type": "topic" + } + ] + } + }, + { + "urn": "urn:caramlstore:test-caramlstore:ml_feature_table:merchant_uuid_t2_discovery", + "name": "merchant_uuid_t2_discovery", + "service": "caramlstore", + "type": "ml_feature_table", + "data": { + "@type": "type.googleapis.com/odpf.assets.v1beta2.MLFeatureTable", + "namespace": "food-tensoba", + "entities": [ + { + "name": "merchant_uuid", + "labels": { + "description": "merchant uuid", + "value_type": "STRING" + } + } + ], + "features": [ + { + "name": "avg_t2_merchant_3d", + "data_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_1d", + "data_type": "DOUBLE" + }, + { + "name": "avg_merchant_price", + "data_type": "DOUBLE" + }, + { + "name": "avg_t2_same_hour_merchant_1m", + "data_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_1w", + "data_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_1w", + "data_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_1d", + "data_type": "DOUBLE" + }, + { + "name": "merch_demand_same_hour_1m", + "data_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_3h", + "data_type": "DOUBLE" + }, + { + "name": "t2_discovery", + "data_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_3h", + "data_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_1m", + "data_type": "DOUBLE" + }, + { + "name": "avg_gmv_same_hour_merchant_1m", + "data_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_1m", + "data_type": "DOUBLE" + } + ], + "create_time": "2022-08-08T03:17:54Z", + "update_time": "2022-08-08T03:17:54Z" + }, + "lineage": { + "upstreams": [ + { + "urn": "urn:bigquery:celestial-dragons-staging:table:celestial-dragons-staging:feast.merchant_uuid_t2_discovery", + "service": "bigquery", + "type": "table" + } + ] + } + }, + { + "urn": "urn:caramlstore:test-caramlstore:ml_feature_table:avg_dispatch_arrival_time_10_mins", + "name": "avg_dispatch_arrival_time_10_mins", + "service": "caramlstore", + "type": "ml_feature_table", + "data": { + "@type": "type.googleapis.com/odpf.assets.v1beta2.MLFeatureTable", + "namespace": "food-tensoba", + "entities": [ + { + "name": "merchant_uuid", + "labels": { + "description": "merchant uuid", + "value_type": "STRING" + } + } + ], + "features": [ + { + "name": "ongoing_placed_and_waiting_acceptance_orders", + "data_type": "INT64" + }, + { + "name": "ongoing_orders", + "data_type": "INT64" + }, + { + "name": "merchant_avg_dispatch_arrival_time_10m", + "data_type": "FLOAT" + }, + { + "name": "ongoing_accepted_orders", + "data_type": "INT64" + } + ], + "create_time": "2022-09-19T22:42:04Z", + "update_time": "2022-09-21T13:23:02Z" + }, + "lineage": { + "upstreams": [ + { + "urn": "urn:kafka:int-dagstream-kafka.yonkou.io:topic:GO_FOOD-delay-allocation-merchant-feature-10m-log", + "service": "kafka", + "type": "topic" + } + ] + } + } +] diff --git a/plugins/extractors/caramlstore/testdata/mocked-entities-food-tensoba.json b/plugins/extractors/caramlstore/testdata/mocked-entities-food-tensoba.json new file mode 100644 index 000000000..ac3e45fd5 --- /dev/null +++ b/plugins/extractors/caramlstore/testdata/mocked-entities-food-tensoba.json @@ -0,0 +1,92 @@ +{ + "entities": [ + { + "spec": { + "name": "merchant_uuid", + "value_type": "STRING", + "description": "merchant uuid" + }, + "meta": { + "created_timestamp": "2022-08-08T03:17:51Z", + "last_updated_timestamp": "2022-08-08T03:17:51Z" + } + }, + { + "spec": { + "name": "booking_hour", + "value_type": "STRING", + "description": "Booking creation hour" + }, + "meta": { + "created_timestamp": "2022-08-08T03:17:51Z", + "last_updated_timestamp": "2022-08-08T03:17:51Z" + } + }, + { + "spec": { + "name": "day_of_week", + "value_type": "STRING", + "description": "Booking Day of Week" + }, + "meta": { + "created_timestamp": "2022-08-08T03:17:51Z", + "last_updated_timestamp": "2022-08-08T03:17:51Z" + } + }, + { + "spec": { + "name": "meal_id", + "value_type": "STRING", + "description": "Mealtime Identifier" + }, + "meta": { + "created_timestamp": "2022-08-08T03:17:51Z", + "last_updated_timestamp": "2022-08-08T03:17:51Z" + } + }, + { + "spec": { + "name": "t3_distance_bucket", + "value_type": "STRING", + "description": "T3 Distance Bucket" + }, + "meta": { + "created_timestamp": "2022-08-08T03:17:51Z", + "last_updated_timestamp": "2022-08-08T03:17:51Z" + } + }, + { + "spec": { + "name": "destination_s2id_12", + "value_type": "STRING", + "description": "Destination s2id_12" + }, + "meta": { + "created_timestamp": "2022-09-02T08:28:33Z", + "last_updated_timestamp": "2022-09-02T08:28:33Z" + } + }, + { + "spec": { + "name": "service_area_id", + "value_type": "STRING", + "description": "the id of gofood service area" + }, + "meta": { + "created_timestamp": "2022-09-14T03:10:45Z", + "last_updated_timestamp": "2022-09-14T03:10:45Z" + } + }, + { + "spec": { + "name": "item_uuid", + "value_type": "STRING", + "description": "item uuid" + }, + "meta": { + "created_timestamp": "2022-09-17T15:14:13Z", + "last_updated_timestamp": "2022-09-17T15:14:13Z" + } + } + ] +} diff --git a/plugins/extractors/caramlstore/testdata/mocked-entities-sauron.json b/plugins/extractors/caramlstore/testdata/mocked-entities-sauron.json new file mode 100644 index 000000000..8ad85d447 --- /dev/null +++ b/plugins/extractors/caramlstore/testdata/mocked-entities-sauron.json @@ -0,0 +1,81 @@ +{ + "entities": [ + { + "spec": { + "name": "s2id_13", + "value_type": "STRING", + "description": "S2 ID Level 13" + }, + "meta": { + "created_timestamp": "2022-08-08T03:15:35Z", + "last_updated_timestamp": "2022-08-08T03:15:35Z" + } + }, + { + "spec": { + "name": "service_type", + "value_type": "STRING", + "description": "Service type" + }, + "meta": { + "created_timestamp": "2022-08-08T03:15:35Z", + "last_updated_timestamp": "2022-08-08T03:15:35Z" + } + }, + { + "spec": { + "name": "mixed_spatial_id_v1", + "value_type": "STRING", + "description": "Mixed Spatial Index Version 1" + }, + "meta": { + "created_timestamp": "2022-08-08T03:15:35Z", + "last_updated_timestamp": "2022-08-08T03:15:35Z" + } + }, + { + "spec": { + "name": "s2id_11", + "value_type": "STRING", + "description": "S2 ID Level 11" + }, + "meta": { + "created_timestamp": "2022-08-08T03:15:35Z", + "last_updated_timestamp": "2022-08-08T03:15:35Z" + } + }, + { + "spec": { + "name": "s2id_12", + "value_type": "STRING", + "description": "S2 ID Level 12" + }, + "meta": { + "created_timestamp": "2022-08-08T03:15:35Z", + "last_updated_timestamp": "2022-08-08T03:15:35Z" + } + }, + { + "spec": { + "name": "vehicle_type", + "value_type": "STRING", + "description": "Vehicle type" + }, + "meta": { + "created_timestamp": "2022-08-08T03:15:35Z", + "last_updated_timestamp": "2022-08-08T03:15:35Z" + } + }, + { + "spec": { + "name": "merchant_id", + "value_type": "STRING", + "description": "Unique ID of merchant" + }, + "meta": { + "created_timestamp": "2022-08-08T03:15:35Z", + "last_updated_timestamp": "2022-08-08T03:15:35Z" + } + } + ] +} diff --git a/plugins/extractors/caramlstore/testdata/mocked-feature-tables-food-tensoba.json b/plugins/extractors/caramlstore/testdata/mocked-feature-tables-food-tensoba.json new file mode 100644 index 000000000..b2249c03a --- /dev/null +++ b/plugins/extractors/caramlstore/testdata/mocked-feature-tables-food-tensoba.json @@ -0,0 +1,152 @@ +{ + "tables": [ + { + "spec": { + "name": "merchant_uuid_t2_discovery", + "entities": [ + "merchant_uuid" + ], + "features": [ + { + "name": "avg_t2_merchant_3d", + "value_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_1d", + "value_type": "DOUBLE" + }, + { + "name": "avg_merchant_price", + "value_type": "DOUBLE" + }, + { + "name": "avg_t2_same_hour_merchant_1m", + "value_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_1w", + "value_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_1w", + "value_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_1d", + "value_type": "DOUBLE" + }, + { + "name": "merch_demand_same_hour_1m", + "value_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_3h", + "value_type": "DOUBLE" + }, + { + "name": "t2_discovery", + "value_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_3h", + "value_type": "DOUBLE" + }, + { + "name": "avg_gmv_merchant_1m", + "value_type": "DOUBLE" + }, + { + "name": "avg_gmv_same_hour_merchant_1m", + "value_type": "DOUBLE" + }, + { + "name": "avg_t2_merchant_1m", + "value_type": "DOUBLE" + } + ], + "max_age": "7200s", + "batch_source": { + "type": "BATCH_BIGQUERY", + "event_timestamp_column": "event_timestamp", + "bigquery_options": { + "table_ref": "celestial-dragons-staging:feast.merchant_uuid_t2_discovery" + } + }, + "online_store": { + "name": "bigtable", + "type": "BIGTABLE" + } + }, + "meta": { + "created_timestamp": "2022-08-08T03:17:54Z", + "last_updated_timestamp": "2022-08-08T03:17:54Z", + "hash": "1227ba57" + } + }, + { + "spec": { + "name": "avg_dispatch_arrival_time_10_mins", + "entities": [ + "merchant_uuid" + ], + "features": [ + { + "name": "ongoing_placed_and_waiting_acceptance_orders", + "value_type": "INT64" + }, + { + "name": "ongoing_orders", + "value_type": "INT64" + }, + { + "name": "merchant_avg_dispatch_arrival_time_10m", + "value_type": "FLOAT" + }, + { + "name": "ongoing_accepted_orders", + "value_type": "INT64" + } + ], + "max_age": "0s", + "batch_source": { + "type": "BATCH_FILE", + "event_timestamp_column": "null", + "file_options": { + "file_format": { + "parquet_format": { + + } + }, + "file_url": "/dev/null" + } + }, + "stream_source": { + "type": "STREAM_KAFKA", + "field_mapping": { + "merchant_uuid": "restaurant_uuid" + }, + "event_timestamp_column": "event_timestamp", + "kafka_options": { + "bootstrap_servers": "int-dagstream-kafka.yonkou.io:6668", + "topic": "GO_FOOD-delay-allocation-merchant-feature-10m-log", + "message_format": { + "proto_format": { + "class_path": "com.bubble.DelayAllocationMerchantFeature10mLogMessage" + } + } + } + }, + "online_store": { + "name": "bigtable", + "type": "BIGTABLE" + } + }, + "meta": { + "created_timestamp": "2022-09-19T22:42:04Z", + "last_updated_timestamp": "2022-09-21T13:23:02Z", + "revision": "2", + "hash": "730855ef" + } + } + ] +} diff --git a/plugins/extractors/caramlstore/testdata/mocked-feature-tables-sauron.json b/plugins/extractors/caramlstore/testdata/mocked-feature-tables-sauron.json new file mode 100644 index 000000000..b683b92c2 --- /dev/null +++ b/plugins/extractors/caramlstore/testdata/mocked-feature-tables-sauron.json @@ -0,0 +1,245 @@ +{ + "tables": [ + { + "spec": { + "name": "s2id13_30min_demand", + "entities": [ + "service_type", + "s2id_13" + ], + "features": [ + { + "name": "s2id13_30min_demand", + "value_type": "FLOAT" + } + ], + "labels": { + "gcThresholdSec": "86400" + }, + "max_age": "600s", + "batch_source": { + "type": "BATCH_BIGQUERY", + "field_mapping": { + "s2id13_30min_demand": "metric", + "s2id_13": "entity1", + "service_type": "entity2" + }, + "event_timestamp_column": "event_timestamp", + "created_timestamp_column": "message_timestamp", + "bigquery_options": { + "table_ref": "bq-raw-internal:dagstream.production_feast09_s2id13_30min_demand" + } + }, + "stream_source": { + "type": "STREAM_KAFKA", + "field_mapping": { + "s2id13_30min_demand": "metric", + "s2id_13": "entity1", + "service_type": "entity2" + }, + "event_timestamp_column": "event_timestamp", + "kafka_options": { + "bootstrap_servers": "int-dagstream-kafka.yonkou.io:9999", + "topic": "staging_feast09_s2id13_30min_demand", + "message_format": { + "proto_format": { + "class_path": "com.bubble.pricing.SauronFeastFeature" + } + } + } + }, + "online_store": { + "name": "redis", + "type": "REDIS" + } + }, + "meta": { + "created_timestamp": "2022-08-08T03:15:35Z", + "last_updated_timestamp": "2022-08-08T03:15:35Z", + "hash": "44485ce7" + } + }, + { + "spec": { + "name": "functional_test_supply", + "entities": [ + "vehicle_type", + "s2id_13" + ], + "features": [ + { + "name": "s2id13_20min_supply", + "value_type": "FLOAT" + } + ], + "max_age": "0s", + "batch_source": { + "type": "BATCH_FILE", + "event_timestamp_column": "event_timestamp", + "created_timestamp_column": "created_timestamp", + "file_options": { + "file_format": { + "parquet_format": { + + } + }, + "file_url": "gs://mlflow-storage-int/sauron/test/test/resources/feast_supply_i.parquet" + } + }, + "online_store": { + "name": "redis", + "type": "REDIS" + } + }, + "meta": { + "created_timestamp": "2022-08-08T03:15:38Z", + "last_updated_timestamp": "2022-08-08T03:15:38Z", + "hash": "e5444670" + } + }, + { + "spec": { + "name": "mixedspatialid_v1_15min_demand_forecast_3es", + "entities": [ + "mixed_spatial_id_v1", + "service_type" + ], + "features": [ + { + "name": "sum_15min_demand_density_forecast_15min", + "value_type": "FLOAT" + }, + { + "name": "sum_15min_demand_forecast_30min", + "value_type": "FLOAT" + }, + { + "name": "sum_15min_demand_density_forecast_30min", + "value_type": "FLOAT" + }, + { + "name": "sum_15min_demand_forecast_0min", + "value_type": "FLOAT" + }, + { + "name": "sum_15min_demand_density_forecast_0min", + "value_type": "FLOAT" + }, + { + "name": "sum_15min_demand_forecast_15min", + "value_type": "FLOAT" + } + ], + "labels": { + "gcThresholdSec": "86400" + }, + "max_age": "600s", + "batch_source": { + "type": "BATCH_BIGQUERY", + "field_mapping": { + "mixed_spatial_id_v1": "mixed_spatial_id_v1", + "service_type": "service_type", + "sum_15min_demand_density_forecast_0min": "sum_15min_value_density_forecast_0min", + "sum_15min_demand_density_forecast_15min": "sum_15min_value_density_forecast_15min", + "sum_15min_demand_density_forecast_30min": "sum_15min_value_density_forecast_30min", + "sum_15min_demand_forecast_0min": "sum_15min_value_forecast_0min", + "sum_15min_demand_forecast_15min": "sum_15min_value_forecast_15min", + "sum_15min_demand_forecast_30min": "sum_15min_value_forecast_30min" + }, + "event_timestamp_column": "event_timestamp", + "created_timestamp_column": "message_timestamp", + "bigquery_options": { + "table_ref": "bq-raw-internal:mainstream.feast09_mixed_granularity_demand_forecast_3es" + } + }, + "stream_source": { + "type": "STREAM_KAFKA", + "field_mapping": { + "mixed_spatial_id_v1": "mixed_spatial_id_v1", + "service_type": "service_type", + "sum_15min_demand_density_forecast_0min": "sum_15min_value_density_forecast_0min", + "sum_15min_demand_density_forecast_15min": "sum_15min_value_density_forecast_15min", + "sum_15min_demand_density_forecast_30min": "sum_15min_value_density_forecast_30min", + "sum_15min_demand_forecast_0min": "sum_15min_value_forecast_0min", + "sum_15min_demand_forecast_15min": "sum_15min_value_forecast_15min", + "sum_15min_demand_forecast_30min": "sum_15min_value_forecast_30min" + }, + "event_timestamp_column": "event_timestamp", + "kafka_options": { + "bootstrap_servers": "celestial-dragons-prodstream.yonkou.io:9999", + "topic": "staging_feast09_mixed_granularity_demand_forecast_3es", + "message_format": { + "proto_format": { + "class_path": "com.bubble.feast.forecast.ForecastMessage" + } + } + } + }, + "online_store": { + "name": "redis", + "type": "REDIS" + } + }, + "meta": { + "created_timestamp": "2022-08-08T03:15:38Z", + "last_updated_timestamp": "2022-08-08T03:15:38Z", + "hash": "9bfcf656" + } + }, + { + "spec": { + "name": "functional_test_s2id13_supply_sg_car", + "entities": [ + "vehicle_type", + "s2id_13" + ], + "features": [ + { + "name": "functional_test_s2id13_supply_sg_car", + "value_type": "FLOAT" + } + ], + "max_age": "7200s", + "batch_source": { + "type": "BATCH_FILE", + "event_timestamp_column": "null", + "file_options": { + "file_format": { + "parquet_format": { + + } + }, + "file_url": "/dev/null" + } + }, + "stream_source": { + "type": "STREAM_KAFKA", + "field_mapping": { + "functional_test_s2id13_supply_sg_car": "metric", + "s2id_13": "entity1", + "vehicle_type": "entity2" + }, + "event_timestamp_column": "event_timestamp", + "kafka_options": { + "bootstrap_servers": "celestial-dragons-prodstream.yonkou.io:9999", + "topic": "functional_test_s2id13_supply_sg_car", + "message_format": { + "proto_format": { + "class_path": "com.bubble.pricing.SauronFeastFeature" + } + } + } + }, + "online_store": { + "name": "redis", + "type": "REDIS" + } + }, + "meta": { + "created_timestamp": "2022-08-08T03:15:39Z", + "last_updated_timestamp": "2022-08-08T03:15:39Z", + "hash": "48e771e6" + } + } + ] +} diff --git a/plugins/extractors/csv/csv.go b/plugins/extractors/csv/csv.go index 505c351c1..1a0fc28ec 100644 --- a/plugins/extractors/csv/csv.go +++ b/plugins/extractors/csv/csv.go @@ -6,7 +6,6 @@ import ( "encoding/csv" "fmt" "io" - "io/ioutil" "os" "path" "path/filepath" @@ -143,7 +142,7 @@ func (e *Extractor) buildFilePaths(filePath string) (files []string, err error) } if fileInfo.IsDir() { - fileInfos, err := ioutil.ReadDir(filePath) + fileInfos, err := os.ReadDir(filePath) if err != nil { return files, err } diff --git a/plugins/extractors/metabase/client.go b/plugins/extractors/metabase/client.go index 286708dbd..883cc16ed 100644 --- a/plugins/extractors/metabase/client.go +++ b/plugins/extractors/metabase/client.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "github.com/pkg/errors" @@ -137,7 +137,7 @@ func (c *client) makeRequest(method, url string, payload interface{}, data inter return fmt.Errorf("getting %d status code", res.StatusCode) } - bytes, err := ioutil.ReadAll(res.Body) + bytes, err := io.ReadAll(res.Body) if err != nil { return errors.Wrap(err, "failed to read response body") } diff --git a/plugins/extractors/populate.go b/plugins/extractors/populate.go index 6c00d1247..24d1ca7bc 100644 --- a/plugins/extractors/populate.go +++ b/plugins/extractors/populate.go @@ -3,6 +3,7 @@ package extractors import ( _ "github.com/odpf/meteor/plugins/extractors/bigquery" _ "github.com/odpf/meteor/plugins/extractors/bigtable" + _ "github.com/odpf/meteor/plugins/extractors/caramlstore" _ "github.com/odpf/meteor/plugins/extractors/cassandra" _ "github.com/odpf/meteor/plugins/extractors/clickhouse" _ "github.com/odpf/meteor/plugins/extractors/couchdb" diff --git a/plugins/util.go b/plugins/util.go index 949c2df31..448c57214 100644 --- a/plugins/util.go +++ b/plugins/util.go @@ -30,8 +30,18 @@ func init() { func buildConfig(configMap map[string]interface{}, c interface{}) (err error) { defaults.SetDefaults(c) - if err = mapstructure.Decode(configMap, c); err != nil { - return err + dec, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: mapstructure.ComposeDecodeHookFunc( + mapstructure.StringToTimeDurationHookFunc(), mapstructure.StringToSliceHookFunc(","), + ), + WeaklyTypedInput: true, + Result: c, + }) + if err != nil { + return fmt.Errorf("create new mapstructure decoder: %w", err) + } + if err = dec.Decode(configMap); err != nil { + return fmt.Errorf("decode with mapstructure: %w", err) } if err = validate.Struct(c); err == nil { return nil diff --git a/test/utils/assert.go b/test/utils/assert.go index 3351e6c2a..89e4c74df 100644 --- a/test/utils/assert.go +++ b/test/utils/assert.go @@ -12,6 +12,8 @@ import ( ) func AssertAssetsWithJSON(t *testing.T, expected, actuals []*v1beta2.Asset) { + t.Helper() + expectedBytes := buildJSONFromAssets(t, expected) actualBytes := buildJSONFromAssets(t, actuals) @@ -19,6 +21,8 @@ func AssertAssetsWithJSON(t *testing.T, expected, actuals []*v1beta2.Asset) { } func AssertProtosWithJSONFile(t *testing.T, expectedFilePath string, actuals []*v1beta2.Asset) { + t.Helper() + expectedBytes, err := os.ReadFile(expectedFilePath) require.NoError(t, err) @@ -28,6 +32,8 @@ func AssertProtosWithJSONFile(t *testing.T, expectedFilePath string, actuals []* } func assertJSON(t *testing.T, expected []byte, actual []byte) { + t.Helper() + options := jsondiff.DefaultConsoleOptions() diff, report := jsondiff.Compare(expected, actual, &options) if diff != jsondiff.FullMatch { diff --git a/test/utils/load.go b/test/utils/load.go new file mode 100644 index 000000000..63534cbd7 --- /dev/null +++ b/test/utils/load.go @@ -0,0 +1,20 @@ +package utils + +import ( + "os" + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/proto" +) + +func LoadJSONIntoProto(t *testing.T, filePath string, m proto.Message) { + t.Helper() + + data, err := os.ReadFile(filePath) + require.NoError(t, err) + + err = protojson.Unmarshal(data, m) + require.NoError(t, err) +} diff --git a/utils/config.go b/utils/config.go index 585d00a5b..5ccc0ef80 100644 --- a/utils/config.go +++ b/utils/config.go @@ -1,14 +1,10 @@ package utils import ( - "errors" "reflect" "strings" "github.com/go-playground/validator/v10" - "github.com/mcuadros/go-defaults" - "github.com/mitchellh/mapstructure" - "github.com/odpf/meteor/plugins" ) var validate *validator.Validate @@ -24,32 +20,3 @@ func init() { return configName }) } - -// BuildConfig builds a config struct from a map -func BuildConfig(configMap map[string]interface{}, c interface{}) (err error) { - defaults.SetDefaults(c) - - if err = mapstructure.Decode(configMap, c); err != nil { - return err - } - if err = validate.Struct(c); err == nil { - return nil - } - - var validationErr validator.ValidationErrors - if errors.As(err, &validationErr) { - var configErrors []plugins.ConfigError - for _, fieldErr := range validationErr { - key := strings.TrimPrefix(fieldErr.Namespace(), "Config.") - configErrors = append(configErrors, plugins.ConfigError{ - Key: key, - Message: fieldErr.Error(), - }) - } - return plugins.InvalidConfigError{ - Errors: configErrors, - } - } - - return err -} diff --git a/utils/error_status.go b/utils/error_status.go new file mode 100644 index 000000000..da32bb9f0 --- /dev/null +++ b/utils/error_status.go @@ -0,0 +1,22 @@ +package utils + +import ( + "github.com/pkg/errors" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func StatusCode(err error) codes.Code { + if err == nil { + return codes.OK + } + + var se interface { + GRPCStatus() *status.Status + } + if errors.As(err, &se) { + return se.GRPCStatus().Code() + } + + return codes.Unknown +} diff --git a/utils/error_status_test.go b/utils/error_status_test.go new file mode 100644 index 000000000..6b7f09c55 --- /dev/null +++ b/utils/error_status_test.go @@ -0,0 +1,45 @@ +package utils + +import ( + "fmt" + "testing" + + "github.com/pkg/errors" + "github.com/stretchr/testify/assert" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func TestStatusCode(t *testing.T) { + cases := []struct { + name string + err error + expected codes.Code + }{ + { + name: "with status.Error", + err: status.Error(codes.NotFound, "Somebody that I used to know"), + expected: codes.NotFound, + }, + { + name: "with wrapped status.Error", + err: fmt.Errorf("%w", status.Error(codes.Unavailable, "I shot the sheriff")), + expected: codes.Unavailable, + }, + { + name: "with std lib error", + err: errors.New("Runnin' down a dream"), + expected: codes.Unknown, + }, + { + name: "with nil error", + err: nil, + expected: codes.OK, + }, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + assert.Equal(t, tc.expected, StatusCode(tc.err)) + }) + } +}