Find Jobs
Hire Freelancers

openstack integration to fetch server list, megabyte utilization

$100-500 USD

Publié il y a presque 13 ans

$100-500 USD

Payé lors de la livraison
Using PHP5 and the openstack api framework we need you to document and implement a connection to rackspace cloud servers and amazon aws. If amazon aws does not have an openstack compatible api because it's proprietary, then you can include the appropriate php sdk classes so that you can pull data from amazon. Rackspace, gogrid, and amazon are the first three providers that will be added, but the auction winner will also connect to the remaining cloud providers. Therefore, you should use object oriented class wrappers to any imported classes which extend from a master cloud provider class. When new providers will be added, new classes will just extend the same basic structure, and will be easily pluggable. ## Deliverables Initially, there should be at least these classes: 1) CloudService - an object containing connectivity data and extending some existing cloud service api. 2) RackspaceService extends CloudService 3) AmazonService extends CloudService 4) CloudServer - an object describing a servers attributes 5) CloudServerImage - an object describing a server image or backup copy Initially, the following methods should be available for all cloud service instances: 1) SomeCloudService::GetServers() will return a list of all online and offline server instances for the currently authenticated API key. Each server should be returned as a server object, and should have all the server data associated with it. 2) SomeCloudService::GetImages() will return a list of all the user stored images available. Each record should be a CloudServerImage object. Each record should have the size of the image object in bytes. 3) SomeCloudService::GetBandwidth(start_time, end_time) will return the megabytes transferred in a certain time period. If these API calls are unavailable from the remote provider, then GetBandwidth should return the total sum of all the outbound and inbound traffic from all the running images in the authenticated account and should return an array containing the total inbound bytes and total outbound bytes at this point in time. 5) SomeCloudService::GetServiceSummary - will return all the info about a users account in an array of other objects or array records - whichever you prefer. This method essentially runs all the other methods in parallel using multicurl and returns the aggregted results. This summary should have all the info about the account. 6) SomeCloudService::GetDiskUtilization - will return all the info broken up by utilization type for the service. I.e. Sum of all the bytes in all the S3 buckets in AWS, Sum of all the bytes in all the Cloudfront servers in AWS, Sum of all the AMI's in AWS. 7) SomeCloudService::GetDBInstances - will return all the database instances running. In rackspace or other cloud providers there are no db instances, so this method will return an empty array. In Amazon, this would return a list of all the running RDS instances, along with their size in megabytes being utilized, total instance size in MB, CPU, Cores, etc. 8) SomeCloudService::GetDiscounts - will return any discounts or coupons the account currently has. In Amazon this could be the reserved instances and amounts paid previously. If this is unavailable, let us know. 9) If the remote cloud service responds with only a certain number of records per page and requires paging, then you must implement paging. This is unlikely. 10) Use the openstack php api, or use the php api/sdk of each respective provider to get all the details. 11) You will be given access to a linux server running nginx + php5.3 with root access for development. 12) You will be given access to an svn server to checkin your work as you make changes. 13) A method call to GetServiceSummary should never take more than 0.25 seconds. Development Constraints: 1) All PHP5.3 code using E_ALL, display_errors=On, strict mode = on 2) Must create a test suite or test case using php simpletest or similar. We can provide sample test suite code if necessary. 3) Must use MULTICURL if there is more than one http request to get info. If you have to make 25 separate requests to build a cloud service summary, you must do it all simultaneously using multicurl. We can provide sample code if necessary. 4) You must use throw/catch for errors and must have error handling built into all class objects. 5) One curl object per CloudService class 6) A flag to enable/disable verbose or debug mode in the code. 7) Generally good coding practices and using standard tab to indent Deliverables: 1) Full source code and ownership of source code that you are writing for us. 2) We will use our API key for each service to get summary results for each provider, and each summary should take less than 0.25 seconds to generate. 3) Pluggable class architecture so you can add other cloud service providers like at&t, gigenet, and others at any time with additional development.
N° de projet : 3348039

Concernant le projet

1 proposition
Projet à distance
Actif à il y a 13 ans

Cherchez-vous à gagner de l'argent ?

Avantages de faire une offre sur Freelancer

Fixez votre budget et vos délais
Soyez payé pour votre travail
Surlignez votre proposition
Il est gratuit de s'inscrire et de faire des offres sur des travaux
1 freelance propose en moyenne $425 USD pour ce travail
Avatar de l'utilisateur
See private message.
$425 USD en 7 jours
0,0 (0 commentaires)

À propos du client

United States
Membre depuis janv. 19, 2004

Vérification du client

Merci ! Nous vous avons envoyé un lien par e-mail afin de réclamer votre crédit gratuit.
Une erreur a eu lieu lors de l'envoi de votre e-mail. Veuillez réessayer.
Utilisateurs enregistrés Total des travaux publiés
Freelancer ® is a registered Trademark of Freelancer Technology Pty Limited (ACN 142 189 759)
Copyright © 2024 Freelancer Technology Pty Limited (ACN 142 189 759)
Chargement de l'aperçu
Permission donnée pour la géolocalisation.
Votre session de connexion a expiré et vous avez été déconnecté. Veuillez vous connecter à nouveau.