ARC developer guide

From SNIC Documentation
Revision as of 13:03, 28 September 2011 by Joel Hedlund (NSC) (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

< Getting started with SweGrid

Libraries and include files

Include files

"/usr/include/glibmm-2.4" "/usr/lib/sigc++-2.0/include" "/usr/lib/glib-2.0/include" "/usr/include/glib-2.0" "/usr/lib/glibmm-2.4/include" "/usr/include/glib-2.0" "/usr/include/sigc++-2.0" "/usr/include/libxml2"

Libraries

arcclient arccommon arcdata2 arccredential glibmm-2.4 sigc-2.0 pthread

Listing files

// -*- indent-tabs-mode: nil -*-

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#define VERSION "JL"

#include <iostream>
#include <string>
#include <list>

#include <arc/ArcLocation.h>
#include <arc/Logger.h>
#include <arc/StringConv.h>
#include <arc/URL.h>
#include <arc/UserConfig.h>
#include <arc/credential/Credential.h>
#include <arc/data/DataHandle.h>
#include <arc/data/DataPoint.h>
#include <arc/OptionParser.h>

static Arc::Logger logger(Arc::Logger::getRootLogger(), "arcls");

int main(int argc, char **argv) {
	
	// Setup logging

	Arc::LogStream logcerr(std::cerr);
	logcerr.setFormat(Arc::ShortFormat);
	Arc::Logger::getRootLogger().addDestination(logcerr);
	Arc::Logger::getRootLogger().setThreshold(Arc::WARNING);
	
	// Setup user configuration
	
	Arc::UserConfig usercfg("/home/jonas/.arc/client.conf", Arc::initializeCredentialsType::SkipCredentials);
	if (!usercfg) {
		logger.msg(Arc::ERROR, "Failed configuration initialization");
		return 1;
	}
	usercfg.UtilsDirPath(Arc::UserConfig::ARCUSERDIRECTORY);
	
	// Setup URL

	std::string urlString = "srm://srm.swegrid.se/ops";
	Arc::URL url = urlString;
	
	// Check for secure protocol
	
	if (url.IsSecureProtocol()) {
		usercfg.InitializeCredentials();
		if (!Arc::Credential::IsCredentialsValid(usercfg)) {
			logger.msg(Arc::ERROR, "Unable to list content of %s: No valid credentials found", url.str());
			return false;
		}
	}
	
	// Create a data handle
	
	Arc::DataHandle dataHandle(url, usercfg);	

	if (!dataHandle) {
		logger.msg(Arc::ERROR, "Unsupported URL given");
		return false;
	}
	dataHandle->SetSecure(false);
	
	// Check access

	if(true) {
		std::cout << urlString << " - ";
		if(dataHandle->Check()) {
			std::cout << "passed" << std::endl;
		} else {
			std::cout << "failed" << std::endl;
		}
	}	
	
	// What information to retrieve
	
	Arc::DataPoint::DataPointInfoType verb = (Arc::DataPoint::DataPointInfoType) 
											 (Arc::DataPoint::INFO_TYPE_MINIMAL |
											 Arc::DataPoint::INFO_TYPE_NAME |
											 Arc::DataPoint::INFO_TYPE_STRUCT |
											 Arc::DataPoint::INFO_TYPE_ALL |
											 Arc::DataPoint::INFO_TYPE_TYPE |
										     Arc::DataPoint::INFO_TYPE_TIMES |
										     Arc::DataPoint::INFO_TYPE_CONTENT |
											 Arc::DataPoint::INFO_TYPE_ACCESS);
				   
	Arc::DataStatus res;
	Arc::FileInfo file;
	std::list<Arc::FileInfo> files;
	
	// Do file listing
	
	res = dataHandle->List(files, verb);
	
	// Check for errors
	
	if (!res) {
		if (files.size() == 0) { 
			logger.msg(Arc::ERROR, "Failed listing files");
			if (res.Retryable())
				logger.msg(Arc::ERROR, "This seems like a temporary error, please try again later");
			return false;
		}
		logger.msg(Arc::INFO, "Warning: "
				   "Failed listing files but some information is obtained");
	}
	
	// Show files
	
    std::cout << "<Name>";
	std::cout << " <Type>";
	std::cout << " <Size>";
	std::cout << " <Creation>";
	std::cout << " <Validity>";
	std::cout << " <CheckSum>";
	std::cout << " <Latency>";
	
	
	for (std::list<Arc::FileInfo>::iterator i = files.begin(); i != files.end(); i++) 
	{
		std::cout << i->GetName();
		switch (i->GetType()) {
		case Arc::FileInfo::file_type_file:
			std::cout << " file";
		break;

		case Arc::FileInfo::file_type_dir:
			std::cout << " dir";
		break;

		default:
			std::cout << " unknown";
		break;
		}	
		
		if (i->CheckSize())
			std::cout << " " << i->GetSize();
		else
			std::cout << " (n/a)";
		if (i->CheckCreated())
			std::cout << " " << i->GetCreated();
		else
			std::cout << " (n/a)";
		if (i->CheckValid())
			std::cout << " " << i->GetValid();
		else
			std::cout << " (n/a)";
		if (i->CheckCheckSum())
			std::cout << " " << i->GetCheckSum();
		else
			std::cout << " (n/a)";
		if (i->CheckLatency())
			std::cout << " " << i->GetLatency();
		else
			std::cout << " (n/a)";
			
		std::cout << std::endl;
			
		// Show urls
		
		for (std::list<Arc::URL>::const_iterator u = i->GetURLs().begin();
			u != i->GetURLs().end(); u++)
			std::cout << "\t" << *u << std::endl;
			
		// Show metadata
			
		//std::map<std::string, std::string> md = i->GetMetaData();
		//for (std::map<std::string, std::string>::iterator mi = md.begin(); mi != md.end(); ++mi)
		//	std::cout<<mi->first<<":"<<mi->second<<std::endl;
	}
}