Package org.platformlayer.service.aptcache.ops

Source Code of org.platformlayer.service.aptcache.ops.AptCacheServiceController

package org.platformlayer.service.aptcache.ops;

import java.io.File;
import java.net.URI;

import javax.inject.Inject;

import org.platformlayer.core.model.ManagedItemState;
import org.platformlayer.ops.Handler;
import org.platformlayer.ops.OpsContext;
import org.platformlayer.ops.OpsException;
import org.platformlayer.ops.filesystem.SimpleFile;
import org.platformlayer.ops.helpers.InstanceHelpers;
import org.platformlayer.ops.instances.InstanceBuilder;
import org.platformlayer.ops.networks.NetworkPoint;
import org.platformlayer.ops.networks.NetworkPoints;
import org.platformlayer.ops.networks.PublicEndpoint;
import org.platformlayer.ops.packages.PackageDependency;
import org.platformlayer.ops.proxy.HttpProxyController;
import org.platformlayer.ops.service.ManagedService;
import org.platformlayer.ops.tree.OpsTreeBase;
import org.platformlayer.service.aptcache.model.AptCacheService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class AptCacheServiceController extends OpsTreeBase implements HttpProxyController {
  private static final Logger log = LoggerFactory.getLogger(AptCacheServiceController.class);

  public static final int PORT = 3128;

  @Inject
  InstanceHelpers instances;

  @Inject
  NetworkPoints network;

  @Handler
  public void doOperation() {
  }

  @Override
  protected void addChildren() throws OpsException {
    AptCacheService model = OpsContext.get().getInstance(AptCacheService.class);

    // TODO: Create endpoint with default port; maybe default to closed?
    // model.dnsName

    InstanceBuilder instance = InstanceBuilder.build(model.dnsName, this, model.getTags());
    instance.hostPolicy.allowRunInContainer = true;
    addChild(instance);

    instance.addChild(PackageDependency.build("squid3"));

    instance.addChild(SimpleFile.build(getClass(), new File("/etc/squid3/squid.conf")));

    instance.addChild(ManagedService.build("squid3"));

    // instance.addChild(CollectdCollector.build());

    {
      PublicEndpoint endpoint = injected(PublicEndpoint.class);
      endpoint.publicPort = PORT;
      endpoint.backendPort = PORT;
      endpoint.dnsName = model.dnsName;

      endpoint.tagItem = model.getKey();
      endpoint.parentItem = model.getKey();

      instance.addChild(endpoint);
    }
  }

  @Override
  public String getUrl(Object modelObject, NetworkPoint forNetworkPoint, URI uri) throws OpsException {
    AptCacheService model = (AptCacheService) modelObject;

    if (model.getState() != ManagedItemState.ACTIVE) {
      log.info("Cache not active; returning null URL");
      return null;
    }

    // {
    // // By DNS
    // String dnsName = aptCacheService.getDnsName();
    // String address = "http://" + dnsName + ":3128/";
    // proxies.add(address);
    // }
    //
    // {
    // By IP
    NetworkPoint networkPoint = network.findNetworkPoint(model);
    if (networkPoint == null) {
      log.info("Machine not found for cache; returning null URL");
      return null;
    }

    String address = "http://" + networkPoint.getBestAddress(forNetworkPoint) + ":3128/";
    return address;
  }
}
TOP

Related Classes of org.platformlayer.service.aptcache.ops.AptCacheServiceController

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.