@@ -10,11 +10,10 @@ OF ANY KIND, either express or implied. See the License for the specific languag
1010governing permissions and limitations under the License.
1111*/
1212
13- const BaseCommand = require ( '../../../../base-command' )
14- const { initSdk, getProgramId, sanitizeEnvironmentId } = require ( '../../../../cloudmanager-helpers' )
15- const commonFlags = require ( '../../../../common-flags' )
16- const commonArgs = require ( '../../../../common-args' )
17- const { executeWithRetries } = require ( './utils' )
13+ const BaseCommand = require ( '../../../base-command' )
14+ const { initSdk, getProgramId, sanitizeEnvironmentId } = require ( '../../../cloudmanager-helpers' )
15+ const commonFlags = require ( '../../../common-flags' )
16+ const commonArgs = require ( '../../../common-args' )
1817
1918class TailLog extends BaseCommand {
2019 async run ( ) {
@@ -39,6 +38,36 @@ class TailLog extends BaseCommand {
3938 }
4039}
4140
41+ async function executeWithRetries ( fn , maxRetries = 5 ) {
42+ let retries = 0
43+ let startTime = Date . now ( )
44+ while ( retries < maxRetries ) {
45+ try {
46+ return await fn ( )
47+ } catch ( error ) {
48+ if ( error . sdkDetails && error . sdkDetails . status === 403 ) {
49+ console . log ( '403 Forbidden error. Attempting to reauthorize...' )
50+ } else {
51+ throw error
52+ }
53+ retries ++
54+ if ( shouldResetRetires ( startTime ) ) {
55+ retries = 0
56+ startTime = Date . now ( )
57+ }
58+ }
59+ }
60+ }
61+
62+ function shouldResetRetires ( startTime , resetInterval = 3600000 ) {
63+ const elapsedTime = Date . now ( ) - startTime
64+ if ( elapsedTime > resetInterval ) {
65+ console . log ( `Resetting retries after ${ resetInterval / 1000 } seconds.` )
66+ return true
67+ }
68+ return false
69+ }
70+
4271TailLog . description = 'outputs a stream of log data for the specified environment, service and log name'
4372
4473TailLog . args = [
0 commit comments