Return-Path: X-Original-To: apmail-incubator-celix-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-celix-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A360811E67 for ; Tue, 3 Jun 2014 12:36:22 +0000 (UTC) Received: (qmail 7635 invoked by uid 500); 3 Jun 2014 12:36:22 -0000 Delivered-To: apmail-incubator-celix-commits-archive@incubator.apache.org Received: (qmail 7609 invoked by uid 500); 3 Jun 2014 12:36:22 -0000 Mailing-List: contact celix-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: celix-dev@incubator.apache.org Delivered-To: mailing list celix-commits@incubator.apache.org Received: (qmail 7602 invoked by uid 99); 3 Jun 2014 12:36:22 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Jun 2014 12:36:22 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Jun 2014 12:36:21 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 368E82388980; Tue, 3 Jun 2014 12:35:56 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1599511 - in /incubator/celix/trunk: cmake/ deployment_admin/ deployment_admin/private/include/ deployment_admin/private/src/ framework/public/include/ Date: Tue, 03 Jun 2014 12:35:55 -0000 To: celix-commits@incubator.apache.org From: pnoltes@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140603123556.368E82388980@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: pnoltes Date: Tue Jun 3 12:35:55 2014 New Revision: 1599511 URL: http://svn.apache.org/r1599511 Log: CELIX-118: - Added properties in the cmake deploy macro, so that additional properties in the config.properties can be specified. This is, for example, useful for the deployment admin. - Fixed bug in deployment_admin when a tmp directory for unpacking deployment packages on a different device that the target directory is used. Unpacking now happens in directly in the bundle directory. - Added the first support for the auditlog. Celix target will now automatically popup in Apache ACE. Modified: incubator/celix/trunk/cmake/Packaging.cmake incubator/celix/trunk/cmake/config.properties.in incubator/celix/trunk/deployment_admin/CMakeLists.txt incubator/celix/trunk/deployment_admin/deploy.cmake incubator/celix/trunk/deployment_admin/private/include/deployment_admin.h incubator/celix/trunk/deployment_admin/private/src/deployment_admin.c incubator/celix/trunk/framework/public/include/celix_errno.h Modified: incubator/celix/trunk/cmake/Packaging.cmake URL: http://svn.apache.org/viewvc/incubator/celix/trunk/cmake/Packaging.cmake?rev=1599511&r1=1599510&r2=1599511&view=diff ============================================================================== --- incubator/celix/trunk/cmake/Packaging.cmake (original) +++ incubator/celix/trunk/cmake/Packaging.cmake Tue Jun 3 12:35:55 2014 @@ -324,7 +324,7 @@ ENDMACRO(package) ADD_CUSTOM_TARGET(deploy) MACRO(deploy) - PARSE_ARGUMENTS(DEPLOY "BUNDLES;DRIVERS;ENDPOINTS" "" ${ARGN}) + PARSE_ARGUMENTS(DEPLOY "BUNDLES;DRIVERS;ENDPOINTS;PROPERTIES" "" ${ARGN}) LIST(GET DEPLOY_DEFAULT_ARGS 0 DEPLOY_NAME) SET(DEPLOY_COMPONENT deploy_${DEPLOY_NAME}) @@ -332,6 +332,7 @@ MACRO(deploy) SET(BUNDLES "") SET(DEPS) + SET(PROPERTIES "") FOREACH(BUNDLE ${DEPLOY_BUNDLES}) SET(DEP_NAME ${DEPLOY_NAME}_${BUNDLE}) @@ -345,6 +346,7 @@ MACRO(deploy) SET(BUNDLES "${BUNDLES} bundles/${BUNDLE}.zip") SET(DEPS ${DEPS};${CMAKE_CURRENT_BINARY_DIR}/deploy/${DEPLOY_NAME}/bundles/${BUNDLE}.zip) ENDFOREACH(BUNDLE) + FOREACH(BUNDLE ${DEPLOY_DRIVERS}) SET(DEP_NAME ${DEPLOY_NAME}_${BUNDLE}) get_property(bundle_file TARGET ${BUNDLE} PROPERTY BUNDLE) @@ -356,8 +358,9 @@ MACRO(deploy) ) #SET(BUNDLES "${BUNDLES} drivers/${BUNDLE}.zip") SET(DEPS ${DEPS};${CMAKE_CURRENT_BINARY_DIR}/deploy/${DEPLOY_NAME}/drivers/${BUNDLE}.zip) - ENDFOREACH(BUNDLE) - FOREACH(BUNDLE ${DEPLOY_ENDPOINTS}) + ENDFOREACH(BUNDLE) + + FOREACH(BUNDLE ${DEPLOY_ENDPOINTS}) SET(DEP_NAME ${DEPLOY_NAME}_${BUNDLE}) get_property(bundle_file TARGET ${BUNDLE} PROPERTY BUNDLE) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/deploy/${DEPLOY_NAME}/endpoints/${BUNDLE}.zip @@ -368,7 +371,11 @@ MACRO(deploy) ) #SET(BUNDLES "${BUNDLES} drivers/${BUNDLE}.zip") SET(DEPS ${DEPS};${CMAKE_CURRENT_BINARY_DIR}/deploy/${DEPLOY_NAME}/endpoints/${BUNDLE}.zip) - ENDFOREACH(BUNDLE) + ENDFOREACH(BUNDLE) + + FOREACH(PROPERTY ${DEPLOY_PROPERTIES}) + SET(PROPERTIES "${PROPERTIES}\n${PROPERTY}") + ENDFOREACH(PROPERTY) IF(NOT(CELIX_FOUND)) #celix project set(DEPS ${DEPS};celix) Modified: incubator/celix/trunk/cmake/config.properties.in URL: http://svn.apache.org/viewvc/incubator/celix/trunk/cmake/config.properties.in?rev=1599511&r1=1599510&r2=1599511&view=diff ============================================================================== --- incubator/celix/trunk/cmake/config.properties.in (original) +++ incubator/celix/trunk/cmake/config.properties.in Tue Jun 3 12:35:55 2014 @@ -1 +1,2 @@ -cosgi.auto.start.1=@BUNDLES@ \ No newline at end of file +cosgi.auto.start.1=@BUNDLES@ +@PROPERTIES@ Modified: incubator/celix/trunk/deployment_admin/CMakeLists.txt URL: http://svn.apache.org/viewvc/incubator/celix/trunk/deployment_admin/CMakeLists.txt?rev=1599511&r1=1599510&r2=1599511&view=diff ============================================================================== --- incubator/celix/trunk/deployment_admin/CMakeLists.txt (original) +++ incubator/celix/trunk/deployment_admin/CMakeLists.txt Tue Jun 3 12:35:55 2014 @@ -26,6 +26,8 @@ if (DEPLOYMENT_ADMIN) SET_HEADERS("Bundle-Name: Apache Celix Deployment Admin") include_directories("${CURL_INCLUDE_DIR}") + include_directories("${APR_INCLUDE_DIR}") + include_directories("${APRUTIL_INCLUDE_DIR}") include_directories("${PROJECT_SOURCE_DIR}/utils/public/include") include_directories("${PROJECT_SOURCE_DIR}/deployment_admin/private/include") include_directories("${PROJECT_SOURCE_DIR}/deployment_admin/public/include") @@ -57,5 +59,5 @@ if (DEPLOYMENT_ADMIN) public/include/resource_processor.h ) - target_link_libraries(deployment_admin celix_framework ${CURL_LIBRARIES}) + target_link_libraries(deployment_admin celix_framework ${CURL_LIBRARIES} ${APR_LIBRARY} ${APRUTIL_LIBRARY}) endif (DEPLOYMENT_ADMIN) Modified: incubator/celix/trunk/deployment_admin/deploy.cmake URL: http://svn.apache.org/viewvc/incubator/celix/trunk/deployment_admin/deploy.cmake?rev=1599511&r1=1599510&r2=1599511&view=diff ============================================================================== --- incubator/celix/trunk/deployment_admin/deploy.cmake (original) +++ incubator/celix/trunk/deployment_admin/deploy.cmake Tue Jun 3 12:35:55 2014 @@ -16,5 +16,9 @@ # under the License. is_enabled(DEPLOYMENT_ADMIN) if (DEPLOYMENT_ADMIN) - deploy("deployment-admin" BUNDLES deployment_admin shell shell_tui log_service log_writer) -endif (DEPLOYMENT_ADMIN) \ No newline at end of file + deploy("deployment-admin" BUNDLES deployment_admin shell shell_tui log_service log_writer PROPERTIES + "deployment_admin_url=http://localhost:8080" + "deployment_admin_identification=celix" + "org.osgi.framework.storage.clean=onFirstInit" + ) +endif (DEPLOYMENT_ADMIN) Modified: incubator/celix/trunk/deployment_admin/private/include/deployment_admin.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/deployment_admin/private/include/deployment_admin.h?rev=1599511&r1=1599510&r2=1599511&view=diff ============================================================================== --- incubator/celix/trunk/deployment_admin/private/include/deployment_admin.h (original) +++ incubator/celix/trunk/deployment_admin/private/include/deployment_admin.h Tue Jun 3 12:35:55 2014 @@ -43,8 +43,15 @@ struct deployment_admin { hash_map_pt packages; char *targetIdentification; char *pollUrl; + char *auditlogUrl; + apr_time_t auditlogId; + unsigned int aditlogSeqNr; }; +typedef enum { + DEPLOYMENT_ADMIN_AUDIT_EVENT__FRAMEWORK_STARTED = 1005 +} DEPLOYMENT_ADMIN_AUDIT_EVENT; + celix_status_t deploymentAdmin_create(apr_pool_t *pool, bundle_context_pt context, deployment_admin_pt *admin); #endif /* DEPLOYMENT_ADMIN_H_ */ Modified: incubator/celix/trunk/deployment_admin/private/src/deployment_admin.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/deployment_admin/private/src/deployment_admin.c?rev=1599511&r1=1599510&r2=1599511&view=diff ============================================================================== --- incubator/celix/trunk/deployment_admin/private/src/deployment_admin.c (original) +++ incubator/celix/trunk/deployment_admin/private/src/deployment_admin.c Tue Jun 3 12:35:55 2014 @@ -23,14 +23,22 @@ * \author Apache Celix Project Team * \copyright Apache License, Version 2.0 */ + +#include #include #include #include #include + #include #include + +#include #include +#include +#include +#include "celixbool.h" #include "deployment_admin.h" #include "celix_errno.h" #include "bundle_context.h" @@ -52,7 +60,7 @@ #define VERSIONS "/versions" -static void *APR_THREAD_FUNC deploymentAdmin_poll(apr_thread_t *thd, void *deploymentAdmin); +static void* deploymentAdmin_poll(apr_thread_t *thd, void *deploymentAdmin); celix_status_t deploymentAdmin_download(char * url, char **inputFile); size_t deploymentAdmin_writeData(void *ptr, size_t size, size_t nmemb, FILE *stream); static celix_status_t deploymentAdmin_deleteTree(char * directory, apr_pool_t *mp); @@ -65,6 +73,7 @@ celix_status_t deploymentAdmin_processDe celix_status_t deploymentAdmin_dropDeploymentPackageResources(deployment_admin_pt admin, deployment_package_pt source, deployment_package_pt target); celix_status_t deploymentAdmin_dropDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt source, deployment_package_pt target); celix_status_t deploymentAdmin_startDeploymentPackageBundles(deployment_admin_pt admin, deployment_package_pt source); +static celix_status_t deploymentAdmin_updateAuditPool(deployment_admin_pt admin, DEPLOYMENT_ADMIN_AUDIT_EVENT auditEvent); celix_status_t deploymentAdmin_create(apr_pool_t *pool, bundle_context_pt context, deployment_admin_pt *admin) { celix_status_t status = CELIX_SUCCESS; @@ -82,7 +91,12 @@ celix_status_t deploymentAdmin_create(ap (*admin)->packages = hashMap_create(utils_stringHash, NULL, utils_stringEquals, NULL); (*admin)->targetIdentification = NULL; (*admin)->pollUrl = NULL; + (*admin)->auditlogUrl = NULL; + bundleContext_getProperty(context, IDENTIFICATION_ID, &(*admin)->targetIdentification); + (*admin)->auditlogId = apr_time_now(); + (*admin)->aditlogSeqNr = 0; + if ((*admin)->targetIdentification == NULL ) { printf("Target name must be set using \"deployment_admin_identification\"\n"); status = CELIX_ILLEGAL_ARGUMENT; @@ -93,7 +107,8 @@ celix_status_t deploymentAdmin_create(ap printf("URL must be set using \"deployment_admin_url\"\n"); status = CELIX_ILLEGAL_ARGUMENT; } else { - (*admin)->pollUrl = apr_pstrcat(subpool, url, (*admin)->targetIdentification, VERSIONS, NULL); + (*admin)->pollUrl = apr_pstrcat(subpool, url, "/deployment/", (*admin)->targetIdentification, VERSIONS, NULL); + (*admin)->auditlogUrl = apr_pstrcat(subpool, url, "/auditlog", NULL); // log_store_pt store = NULL; // log_pt log = NULL; @@ -113,9 +128,48 @@ celix_status_t deploymentAdmin_create(ap return status; } -static void *APR_THREAD_FUNC deploymentAdmin_poll(apr_thread_t *thd, void *deploymentAdmin) { +static celix_status_t deploymentAdmin_updateAuditPool(deployment_admin_pt admin, DEPLOYMENT_ADMIN_AUDIT_EVENT auditEvent) { + celix_status_t status = CELIX_SUCCESS; + + + CURL *curl; + CURLcode res; + curl = curl_easy_init(); + + if (!curl) { + status = CELIX_BUNDLE_EXCEPTION; + printf("Error initializing curl\n"); + } + + char url[strlen(admin->auditlogUrl)+6]; + sprintf(url, "%s/send", admin->auditlogUrl); + char entry[512]; + int entrySize = snprintf(entry, 512, "%s,%i,%i,0,%i\n", admin->targetIdentification, admin->auditlogId, admin->aditlogSeqNr++, auditEvent); + if (entrySize >= 512) { + status = CELIX_BUNDLE_EXCEPTION; + printf("Error, entry buffer is too small\n"); + } + + if (status == CELIX_SUCCESS) { + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_POSTFIELDS, entry); + res = curl_easy_perform(curl); + + if (res != CURLE_OK ) { + status = CELIX_BUNDLE_EXCEPTION; + printf("Error sending auditlog, got curl error code %i\n", res); + } + } + + return status; +} + +static void * deploymentAdmin_poll(apr_thread_t *thd, void *deploymentAdmin) { deployment_admin_pt admin = deploymentAdmin; + /*first poll send framework started audit event, note this will register the target in Apache ACE*/ + deploymentAdmin_updateAuditPool(admin, DEPLOYMENT_ADMIN_AUDIT_EVENT__FRAMEWORK_STARTED); + while (admin->running) { //poll ace array_list_pt versions = NULL; @@ -134,16 +188,23 @@ static void *APR_THREAD_FUNC deploymentA request = apr_pstrcat(admin->pool, admin->pollUrl, "/", last, NULL); } - char inputFile[MAXNAMLEN]; + char inputFile[256]; inputFile[0] = '\0'; char *test = inputFile; celix_status_t status = deploymentAdmin_download(request, &test); if (status == CELIX_SUCCESS) { - // Handle file - char tmpDir[MAXNAMLEN]; - tmpDir[0] = '\0'; - tmpnam(tmpDir); + bundle_pt bundle = NULL; + bundleContext_getBundle(admin->context, &bundle); + char *entry = NULL; + bundle_getEntry(bundle, "/", admin->pool, &entry); + // Handle file + char tmpDir[256]; + char uuidStr[128]; + apr_uuid_t tmpUuid; + apr_uuid_get(&tmpUuid); + apr_uuid_format(uuidStr, &tmpUuid); + sprintf(tmpDir, "%s%s", entry, uuidStr); apr_dir_make(tmpDir, APR_UREAD|APR_UWRITE|APR_UEXECUTE, admin->pool); // TODO: update to use bundle cache DataFile instead of module entries. @@ -156,10 +217,6 @@ static void *APR_THREAD_FUNC deploymentA char *name = NULL; deploymentPackage_getName(source, &name); - bundle_pt bundle = NULL; - bundleContext_getBundle(admin->context, &bundle); - char *entry = NULL; - bundle_getEntry(bundle, "/", admin->pool, &entry); char *repoDir = apr_pstrcat(admin->pool, entry, "repo", NULL); apr_dir_make(repoDir, APR_UREAD|APR_UWRITE|APR_UEXECUTE, admin->pool); char *repoCache = apr_pstrcat(admin->pool, entry, "repo/", name, NULL); Modified: incubator/celix/trunk/framework/public/include/celix_errno.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/public/include/celix_errno.h?rev=1599511&r1=1599510&r2=1599511&view=diff ============================================================================== --- incubator/celix/trunk/framework/public/include/celix_errno.h (original) +++ incubator/celix/trunk/framework/public/include/celix_errno.h Tue Jun 3 12:35:55 2014 @@ -31,7 +31,9 @@ #ifndef CELIX_ERRNO_H_ #define CELIX_ERRNO_H_ +#include #include + #include #include "framework_exports.h"