GoogleCloudPlatform / php-docs-samples

A collection of samples that demonstrate how to call Google Cloud services from PHP.
http://cloud.google.com/php
Apache License 2.0
957 stars 1.03k forks source link

BetaAnalyticsDataClient: Uri template error #1957

Closed Natblow closed 7 months ago

Natblow commented 7 months ago

When using the same code sample, I am running into this error:

Could not map bindings for google.analytics.data.v1beta.BetaAnalyticsData/RunPivotReport to any Uri template. Bindings: Array ( [property] => ) UriTemplates: Array ( [0] => /v1beta/{property=properties/*}:runPivotReport )

$client = new BetaAnalyticsDataClient();

// Make an API call.
$request = (new RunReportRequest())
    ->setProperty('properties/' . $property_id)
    ->setDateRanges([
        new DateRange([
            'start_date' => '2020-03-31',
            'end_date' => 'today',
        ]),
    ])
    ->setDimensions([new Dimension([
            'name' => 'city',
        ]),
    ])
    ->setMetrics([new Metric([
            'name' => 'activeUsers',
        ])
    ]);
$response = $client->runReport($request);

I checked if the property_id was correct but everything seems good.

Please let me know if I might be missing something or if the problem is a change in Google's API.

yash30201 commented 7 months ago

Hi @Natblow, thanks for raising this issue.

Can you confirm if you're script is using grpc or rest? The template /v1beta/{property=properties/* is used by rest transport and your code could fallback to rest if grpc is not detected by the script.

Natblow commented 7 months ago

Hi @yash30201 I'm using the same script written above and indeed it is falling back to rest transport. When I force grpc transport like this :

$client = new BetaAnalyticsDataClient([
    'transport' => 'grpc'
]);

it is not detecting grpc in the system somehow :

An uncaught Exception was encountered

Type: Google\ApiCore\ValidationException

Message: gRPC support has been requested but required dependencies have not been found. For details on how to install the gRPC extension please see https://cloud.google.com/php/grpc.

Filename: /var/www/vendor/google/gax/src/GrpcSupportTrait.php

Line Number: 56

Backtrace:

File: /var/www/vendor/google/gax/src/Transport/GrpcTransport.php
Line: 118
Function: validateGrpcSupport

File: /var/www/vendor/google/gax/src/GapicClientTrait.php
Line: 476
Function: build

File: /var/www/vendor/google/gax/src/GapicClientTrait.php
Line: 411
Function: createTransport

File: /var/www/vendor/google/cloud/AnalyticsData/src/V1beta/Gapic/BetaAnalyticsDataGapicClient.php
Line: 297
Function: setClientOptions
....

Here lies the issue I guess...

yash30201 commented 7 months ago

Hi @Natblow, thanks for raising this issue.

Can you confirm if you're script is using grpc or rest? The template /v1beta/{property=properties/* is used by rest transport and your code could fallback to rest if grpc is not detected by the script.

@Natblow, did you try and see if this works for you?

If it does works, you can go ahead with it or install grpc so that you can using the previous template. I would recommend installing grpc as it has better performance than rest. You can find steps to install in our documentation

https://github.com/googleapis/google-cloud-php?tab=readme-ov-file#grpc-and-protobuf

Natblow commented 7 months ago

Hi @yash30201 , that works thank you.

The grpc transport should also work as I have it installed but it doesn't detect it.

I'll use the rest transport for now.

Thank you for your help!

yash30201 commented 7 months ago

Can you run php -i | grep grpc and see what is the output? If grpc is enabled in your machine, then it would output something like :-

grpc
grpc support => enabled
// rest of the grpc configuration

If you're not getting it but you're sure you did install grpc with a success, then make sure you've updated you're php configuration file as mentioned here. After that you can run php -i | grep grpc and you should see that it's installed.

Natblow commented 7 months ago

When I run php -i | grep grpc it does confirm it is enabled :

grpc
grpc support => enabled
...
yash30201 commented 7 months ago

Have you updated your packages (composer update)? If not the can you please try updating them (especially google/gax)

On the other note, do you have the protobuf extension installed and enabled? Or you're using the php implementation (it's automatically required in google/gax which is already there in AnalyticsData's composer.json so no need to implicitly enable this) You can check this by php -i | grep protobuf

Natblow commented 7 months ago

Thank you @yash30201 , protobuf wasn't well setup. Now it seems working :

image

Seems I'm getting the right response object. I don't get any data but that will be another thing for me to look on.

Thank you!