Package io.fathom.cloud.storage

Source Code of io.fathom.cloud.storage.StorageDerivedMetadataImpl

package io.fathom.cloud.storage;

import io.fathom.cloud.CloudException;
import io.fathom.cloud.dns.DnsService;
import io.fathom.cloud.dns.DnsService.DnsRecordsetSpec;
import io.fathom.cloud.loadbalancer.LoadBalanceService;
import io.fathom.cloud.openstack.client.loadbalance.model.LbaasMapping;
import io.fathom.cloud.protobuf.CloudCommons.Attributes;
import io.fathom.cloud.protobuf.CloudCommons.KeyValueData;
import io.fathom.cloud.protobuf.FileModel.BucketData;
import io.fathom.cloud.server.model.Project;

import java.net.URI;
import java.util.List;

import javax.inject.Inject;

import com.google.common.collect.Lists;

public class StorageDerivedMetadataImpl implements StorageDerivedMetadata {
    // Buckets can't have colons in their metadata key names...
    private static final String KEY_HTTP_HOST = "__http_host";

    @Inject
    DnsService dnsService;

    @Inject
    LoadBalanceService loadBalancer;

    private final List<DnsRecordsetSpec> records = Lists.newArrayList();
    private final List<LbaasMapping> loadBalancerRecords = Lists.newArrayList();

    void build(Project project, BucketData bucket) {
        Attributes metadata = bucket.getAttributes();

        for (KeyValueData entry : metadata.getUserAttributesList()) {
            String key = entry.getKey();
            String value = entry.getValue();

            if (key.equals(KEY_HTTP_HOST)) {
                addHttpHost(project, bucket, value);
            }
        }
    }

    // private void addDnsHost(InstanceInfo instance, String fqdn) {
    // List<InetAddress> ips = getIps(instance, true);
    //
    // for (InetAddress ip : ips) {
    // DnsService.Record record = dnsService.buildAddress(fqdn, ip);
    // records.add(record);
    // }
    // }
    //
    // private List<InetAddress> getIps(InstanceInfo instance, boolean
    // findPublic) {
    // List<InetAddress> addresses = Lists.newArrayList();
    // for (NetworkAddressInfo network :
    // instance.getNetwork().getAddressesList()) {
    // if (findPublic != network.getPublicAddress()) {
    // continue;
    // }
    //
    // String ip = network.getIp();
    // InetAddress addr = InetAddresses.forString(ip);
    //
    // addresses.add(addr);
    // }
    // return addresses;
    // }

    private void addHttpHost(Project project, BucketData bucket, String value) {
        String host = value;

        String publicBucketUrl = "https://api-cloud.fathomdb.com/openstack/storage/" + project.getId() + "/"
                + bucket.getKey();
        URI redirect = URI.create(publicBucketUrl);

        LbaasMapping record = new LbaasMapping();

        record.host = host;
        record.forwardUrl = redirect.toString();

        loadBalancerRecords.add(record);
    }

    public List<DnsRecordsetSpec> getDnsRecords() {
        return records;
    }

    public List<LbaasMapping> getLoadBalancerRecords() {
        return loadBalancerRecords;
    }

    @Override
    public void apply(Project project, BucketData bucket, String systemKey) throws CloudException {
        build(project, bucket);

        dnsService.setDnsRecordsets(systemKey, project, records);
        loadBalancer.setMappings(systemKey, project, loadBalancerRecords);
    }

}
TOP

Related Classes of io.fathom.cloud.storage.StorageDerivedMetadataImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.