public configureAvailableSecurityGroups(command: IEcsServerGroupCommand): void {
    if (command.subnetType == null) {
      command.backingData.filtered.securityGroups = [];
      return;
    }

    const vpcId = chain(command.backingData.subnets)
      .filter({
        account: command.credentials,
        region: command.region,
        purpose: command.subnetType,
      })
      .compact()
      .uniqBy('purpose')
      .map('vpcId')
      .value()[0];

    if (
      command.backingData.securityGroups[command.credentials] &&
      command.backingData.securityGroups[command.credentials]['ecs'] &&
      command.backingData.securityGroups[command.credentials]['ecs'][command.region]
    ) {
      const allSecurityGroups = command.backingData.securityGroups[command.credentials]['ecs'][command.region];
      command.backingData.filtered.securityGroupNames = chain(allSecurityGroups)
        .filter({ vpcId: vpcId })
        .map('name')
        .value();
    }
  }
示例#2
0
  public normalizeLoadBalancer(loadBalancer: IAmazonLoadBalancer): IPromise<IAmazonLoadBalancer> {
    this.normalizeServerGroups(loadBalancer.serverGroups, loadBalancer, 'loadBalancers', 'LoadBalancer');

    let serverGroups = loadBalancer.serverGroups;
    if ((loadBalancer as IAmazonApplicationLoadBalancer).targetGroups) {
      const appLoadBalancer = loadBalancer as IAmazonApplicationLoadBalancer;
      appLoadBalancer.targetGroups.forEach(targetGroup => this.normalizeTargetGroup(targetGroup));
      serverGroups = flatten<IAmazonServerGroup>(map(appLoadBalancer.targetGroups, 'serverGroups'));
    }

    loadBalancer.loadBalancerType = loadBalancer.loadBalancerType || 'classic';
    loadBalancer.provider = loadBalancer.type;

    this.normalizeActions(loadBalancer as IAmazonApplicationLoadBalancer);

    const activeServerGroups = filter(serverGroups, { isDisabled: false });
    loadBalancer.instances = chain(activeServerGroups)
      .map('instances')
      .flatten<IInstance>()
      .value();
    loadBalancer.detachedInstances = chain(activeServerGroups)
      .map('detachedInstances')
      .flatten<IInstance>()
      .value();
    this.updateHealthCounts(loadBalancer);
    return VpcReader.listVpcs().then(
      (vpcs: IVpc[]) => this.addVpcNameToContainer(loadBalancer)(vpcs) as IAmazonLoadBalancer,
    );
  }
示例#3
0
文件: transformer.ts 项目: mizzy/deck
  private buildInstanceCounts(serverGroups: IServerGroup[]): IInstanceCounts {
    const instanceCounts = chain(serverGroups)
      .map(serverGroup => serverGroup.instances)
      .flatten()
      .reduce(
        (acc: IInstanceCounts, instance: any) => {
          acc[camelCase(instance.health.state) as keyof IInstanceCounts]++;
          return acc;
        },
        {
          up: 0,
          down: 0,
          outOfService: 0,
          succeeded: 0,
          failed: 0,
          unknown: 0,
          starting: 0,
        },
      )
      .value();

    instanceCounts.outOfService += chain(serverGroups)
      .map(serverGroup => serverGroup.detachedInstances)
      .flatten()
      .value().length;

    return instanceCounts;
  }
    const uniqueValues = await (async (): Promise<Relation<string[]>> => {
      let allValues = {
        accounts     : [],
        categories   : [],
        subcategories: [],
        payeePayers  : [],
        tags         : []
      } as Relation<string[]>;
      importedCsv.forEach((item) => {
        allValues.accounts     .push(item['Account']);
        allValues.accounts     .push(item['AccountTo']);
        allValues.categories   .push(item['Category']);
        allValues.subcategories.push(item['Subcategory']);
        allValues.payeePayers  .push(item['Payee/Payer']);
        allValues.tags         .push(item['Tag']);
      });

      return {
        accounts     : lodash.chain(allValues.accounts)     .uniq().value(),
        categories   : lodash.chain(allValues.categories)   .uniq().value(),
        subcategories: lodash.chain(allValues.subcategories).uniq().value(),
        payeePayers  : lodash.chain(allValues.payeePayers)  .uniq().value(),
        tags         : lodash.chain(allValues.tags)         .uniq().value()
      };
    })();
示例#5
0
  private normalizeTargetGroup(targetGroup: ITargetGroup): IPromise<ITargetGroup> {
    this.normalizeServerGroups(targetGroup.serverGroups, targetGroup, 'targetGroups', 'TargetGroup');

    const activeServerGroups = filter(targetGroup.serverGroups, { isDisabled: false });
    targetGroup.provider = targetGroup.type;
    targetGroup.instances = chain(activeServerGroups)
      .map('instances')
      .flatten<IInstance>()
      .value();
    targetGroup.detachedInstances = chain(activeServerGroups)
      .map('detachedInstances')
      .flatten<IInstance>()
      .value();
    this.updateHealthCounts(targetGroup);

    return $q.all([VpcReader.listVpcs(), AccountService.listAllAccounts()]).then(([vpcs, accounts]) => {
      const tg = this.addVpcNameToContainer(targetGroup)(vpcs) as ITargetGroup;

      tg.serverGroups = tg.serverGroups.map(serverGroup => {
        const account = accounts.find(x => x.name === serverGroup.account);
        const cloudProvider = serverGroup.cloudProvider || (account && account.cloudProvider);

        serverGroup.instances.forEach(instance => {
          instance.cloudProvider = cloudProvider;
          instance.provider = cloudProvider;
        });

        return { ...serverGroup, cloudProvider };
      });

      return tg;
    });
  }
export function convert(docs: swagger.ApiDefinition, resource?: string): string {

    let resources = _.pick(docs.paths, (operations: any, path: string) => resource ? repository.normalize(path).startsWith(resource) : true)

    let pathLength = 25
    let methodLength = 3
    
    _.chain(resources)
        .forEach((operations, path: string) => {
            _.chain(operations)
                .forEach((operation, method: string) => {
                    methodLength = Math.max(method.length, methodLength)
                })
                .value()             
            pathLength = Math.max(path.length, pathLength)
        })
        .value();

    methodLength = methodLength + 2

    return _.chain(resources)
        .map((operations: swagger.PathsObject, path: string) => {
            return _.chain(operations)
                .map((operation: swagger.OperationObject, method: string) =>
                    `${sprintf(`%-${methodLength}s`, '['+method+']')} ${sprintf(`%-${pathLength}s`, path)} [[b;#fff;]${operation.summary}]`
                )
                .value()
                .join('\n');
        })
        .value()
        .join('\n');
}
 ).map(([sentences, answers]) => [
     _.chain(sentences).map(
         sentence => sentence.words.filter(
             word => sentence.missing_words_positions.indexOf(sentence.words.indexOf(word)) >= 0
         )
     ).flatten().value() as String[],
     _.chain(answers).map(answer => _.values(answer)).flatten().map((answer: { word: String }) => answer.word).value()
 ]).map(([sentences, answers]) => { console.log(answers); return _.difference(sentences, answers) });
示例#8
0
  private normalizeTargetGroup(targetGroup: ITargetGroup): IPromise<ITargetGroup> {
    this.normalizeServerGroups(targetGroup.serverGroups, targetGroup, 'targetGroups', 'TargetGroup');

    const activeServerGroups = filter(targetGroup.serverGroups, {isDisabled: false});
    targetGroup.provider = targetGroup.type;
    targetGroup.instances = chain(activeServerGroups).map('instances').flatten<IInstance>().value();
    targetGroup.detachedInstances = chain(activeServerGroups).map('detachedInstances').flatten<IInstance>().value();
    this.updateHealthCounts(targetGroup);

    return this.vpcReader.listVpcs().then((vpcs: IVpc[]) => this.addVpcNameToContainer(targetGroup)(vpcs) as ITargetGroup);
  }
示例#9
0
  private buildInstanceCounts(serverGroups: ServerGroup[]): InstanceCounts {
    const instanceCounts: InstanceCounts = chain(serverGroups)
      .map('instances')
      .flatten()
      .reduce((acc: InstanceCounts, instance: any) => {
        if (has(instance, 'health.state')) {
          acc[camelCase(instance.health.state)]++;
        }
        return acc;
      }, {up: 0, down: 0, outOfService: 0, succeeded: 0, failed: 0, unknown: 0}).value();

    instanceCounts.outOfService += chain(serverGroups).map('detachedInstances').flatten().value().length;
    return instanceCounts;
  }
  return get_es("/_aliases").then((indices) => {
    // The aliases endpoint returns a map from index name to metadata about those indexes.
    // e.g.
    //   {
    //     ".kibana-4": {
    //       "aliases": {}
    //     },
    //     "logs-2016-04-02": {
    //       "aliases": {
    //         "last_2days": {},
    //         "last_2weeks": {},
    //         "last_day": {},
    //         "last_week": {}
    //       }
    //     },
    //   }
    // It's much easier to work with a map from alias name to list of indexes in the alias.
    const aliases = {};
    for (const index of Object.keys(indices)) {
      for (const alias of Object.keys(indices[index].aliases)) {
        if (!aliases[alias]) {
          aliases[alias] = [];
        }
        aliases[alias].push(index);
        // Keep the results sorted and unique
        aliases[alias] = _.chain(aliases[alias]).sortBy(_.identity).uniq(true).value();
      }
    }

    return aliases;
  });