| /** |
| * Copyright (c) HashiCorp, Inc. |
| * SPDX-License-Identifier: MPL-2.0 |
| */ |
| |
| import Component from '@glimmer/component'; |
| import { inject as service } from '@ember/service'; |
| |
| /** |
| * @module LinkStatus |
| * LinkStatus components are used to indicate link status to the hashicorp cloud platform |
| * |
| * @example |
| * ```js |
| * <LinkStatus @status={{this.currentCluster.cluster.hcpLinkStatus}} /> |
| * ``` |
| * |
| * @param {string} status - cluster.hcpLinkStatus value from currentCluster service -- returned from seal-status endpoint |
| */ |
| |
| export default class LinkStatus extends Component { |
| @service version; |
| |
| get state() { |
| if (!this.args.status) return null; |
| // connected state is returned with no further information |
| if (this.args.status === 'connected') return this.args.status; |
| // disconnected and connecting states are returned with a timestamp and error |
| // state is always the first word of the string |
| return this.args.status.split(' ', 1).toString(); |
| } |
| |
| get timestamp() { |
| try { |
| return this.state !== 'connected' ? this.args.status.split('since')[1].split(';')[0].trim() : null; |
| } catch { |
| return null; |
| } |
| } |
| |
| get error() { |
| const status = this.args.status; |
| return status && status !== 'connected' ? status.split('error:')[1] : null; |
| } |
| } |