Commit daf1370f authored by Greg Williams's avatar Greg Williams
Browse files

Completed implementation of GetLog utilizations. Need to finish the rest.

parent ec86144a
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ LIB_DEPS = \
	$(LIB_DIR)/kinetic_logger.h \
	$(LIB_DIR)/kinetic_hmac.h \
	$(LIB_DIR)/kinetic_controller.h \
	$(LIB_DIR)/kinetic_device_info.h \
	$(LIB_DIR)/kinetic_serial_allocator.h \
	$(LIB_DIR)/kinetic_connection.h \
	$(LIB_DIR)/kinetic_types_internal.h \
	$(PUB_INC)/kinetic_types.h \
@@ -67,6 +69,8 @@ LIB_OBJS = \
	$(OUT_DIR)/kinetic_logger.o \
	$(OUT_DIR)/kinetic_hmac.o \
	$(OUT_DIR)/kinetic_controller.o \
	$(OUT_DIR)/kinetic_device_info.o \
	$(OUT_DIR)/kinetic_serial_allocator.o \
	$(OUT_DIR)/kinetic_connection.o \
	$(OUT_DIR)/kinetic_types_internal.o \
	$(OUT_DIR)/kinetic_types.o \
@@ -113,6 +117,10 @@ $(OUT_DIR)/kinetic_controller.o: $(LIB_DIR)/kinetic_controller.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_connection.o: $(LIB_DIR)/kinetic_connection.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_device_info.o: $(LIB_DIR)/kinetic_device_info.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_serial_allocator.o: $(LIB_DIR)/kinetic_serial_allocator.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_types_internal.o: $(LIB_DIR)/kinetic_types_internal.c $(LIB_DEPS)
	$(CC) -c -o $@ $< $(CFLAGS) $(LIB_INCS)
$(OUT_DIR)/kinetic_types.o: $(LIB_DIR)/kinetic_types.c $(LIB_DEPS)
+5 −3
Original line number Diff line number Diff line
@@ -290,17 +290,19 @@ typedef struct {
    ByteArray name;
} KineticDeviceInfo_Device;
typedef struct {
    KineticDeviceInfo_Utilization** utilizations;
    size_t totalLength;
    KineticDeviceInfo_Utilization* utilizations;
    size_t numUtilizations;
    KineticDeviceInfo_Temperature** temperatures;
    KineticDeviceInfo_Temperature* temperatures;
    size_t numTemperatures;
    KineticDeviceInfo_Capacity* capacity;
    KineticDeviceInfo_Configuration* configuration;
    KineticDeviceInfo_Statistics** statistics;
    KineticDeviceInfo_Statistics* statistics;
    size_t numStatistics;
    ByteArray messages;
    KineticDeviceInfo_Limits* limits;
    KineticDeviceInfo_Device* device;
} KineticDeviceInfo;
#define KINETIC_DEVICE_INFO_SCRATCH_BUF_LEN (1024 * 1024 * 4) // Will get reallocated to actual/used size post-copy

#endif // _KINETIC_TYPES_H
+0 −1
Original line number Diff line number Diff line
@@ -204,7 +204,6 @@ KineticStatus KineticClient_GetLog(KineticSessionHandle handle,
{
    assert(handle != KINETIC_HANDLE_INVALID);
    assert(info != NULL);
    // assert(*info != NULL);

    KineticOperation* operation = KineticController_CreateOperation(handle);
    if (operation == NULL) {return KINETIC_STATUS_MEMORY_ERROR;}
+73 −69
Original line number Diff line number Diff line
@@ -23,84 +23,88 @@
#include "kinetic_logger.h"
#include <stdlib.h>

static size_t sizeof_KineticDeviceInfo_Utilizations(const KineticProto_Command_GetLog* getLog)
{
    size_t size = 0;
    size_t count = getLog->n_utilizations;
    size += count * (sizeof(KineticDeviceInfo_Utilization*) + sizeof(KineticDeviceInfo_Utilization));
    for (size_t i = 0; i < count; i++) {
        if (getLog->utilizations[i]->name != NULL) {
            size += strlen(getLog->utilizations[i]->name) + 1;
        }
    }
    return size;
}
// static size_t sizeof_KineticDeviceInfo_Utilizations(const KineticProto_Command_GetLog* getLog)
// {
//     size_t size = 0;
//     size += getLog->n_utilizations * sizeof(KineticDeviceInfo_Utilization);
//     for (size_t i = 0; i < getLog->n_utilizations; i++) {
//         if (getLog->utilizations[i]->name != NULL) {
//             size += strlen(getLog->utilizations[i]->name) + 1;
//         }
//     }
//     return size;
// }

static size_t sizeof_KineticDeviceInfo_Temperatures(const KineticProto_Command_GetLog* getLog)
{
    size_t size = 0;
    return size;
}
static size_t sizeof_KineticDeviceInfo_Capacity(const KineticProto_Command_GetLog* getLog)
{
    size_t size = 0;
    return size;
}
static size_t sizeof_KineticDeviceInfo_Configuration(const KineticProto_Command_GetLog* getLog)
{
    size_t size = 0;
    return size;
}
static size_t sizeof_KineticDeviceInfo_Statistics(const KineticProto_Command_GetLog* getLog)
{
    size_t size = 0;
    return size;
}
static size_t sizeof_messages(const KineticProto_Command_GetLog* getLog)
{
    size_t size = 0;
    return size;
}
static size_t sizeof_KineticDeviceInfo_Limits(const KineticProto_Command_GetLog* getLog)
{
    size_t size = 0;
    return size;
}
static size_t sizeof_KineticDeviceInfo_Device(const KineticProto_Command_GetLog* getLog)
{
    size_t size = 0;
    return size;
}

static size_t sizeof_KineticDeviceInfo(const KineticProto_Command_GetLog* getLog)
{
    size_t size = 0;
    size += sizeof(KineticDeviceInfo);
    size += sizeof_KineticDeviceInfo_Utilizations(getLog);
    size += sizeof_KineticDeviceInfo_Temperatures(getLog);
    size += sizeof_KineticDeviceInfo_Capacity(getLog);
    size += sizeof_KineticDeviceInfo_Configuration(getLog);
    size += sizeof_KineticDeviceInfo_Statistics(getLog);
    size += sizeof_messages(getLog);
    size += sizeof_KineticDeviceInfo_Limits(getLog);
    size += sizeof_KineticDeviceInfo_Device(getLog);
    return size;
}
// static size_t sizeof_KineticDeviceInfo_Temperatures(const KineticProto_Command_GetLog* getLog)
// {
//     size_t size = 0;
//     return size;
// }
// static size_t sizeof_KineticDeviceInfo_Capacity(const KineticProto_Command_GetLog* getLog)
// {
//     size_t size = 0;
//     return size;
// }
// static size_t sizeof_KineticDeviceInfo_Configuration(const KineticProto_Command_GetLog* getLog)
// {
//     size_t size = 0;
//     return size;
// }
// static size_t sizeof_KineticDeviceInfo_Statistics(const KineticProto_Command_GetLog* getLog)
// {
//     size_t size = 0;
//     return size;
// }
// static size_t sizeof_messages(const KineticProto_Command_GetLog* getLog)
// {
//     size_t size = 0;
//     return size;
// }
// static size_t sizeof_KineticDeviceInfo_Limits(const KineticProto_Command_GetLog* getLog)
// {
//     size_t size = 0;
//     return size;
// }
// static size_t sizeof_KineticDeviceInfo_Device(const KineticProto_Command_GetLog* getLog)
// {
//     size_t size = 0;
//     return size;
// }

KineticDeviceInfo* KineticDeviceInfo_Create(const KineticProto_Command_GetLog* getLog)
{
    assert(getLog != NULL);

    // Determine the total size to allocate for all available data
    size_t totalSize = sizeof_KineticDeviceInfo(getLog);
    KineticDeviceInfo* info = NULL;

    // Allocate the data
    KineticSerialAllocator allocator = KineticSerialAllocator_Create(totalSize);

    info = (KineticDeviceInfo*)allocator.buffer;
    KineticSerialAllocator allocator = KineticSerialAllocator_Create(KINETIC_DEVICE_INFO_SCRATCH_BUF_LEN);

    // Copy data into the nested allocated structure tree
    KineticDeviceInfo* info = KineticSerialAllocator_AllocateChunk(&allocator, sizeof(KineticDeviceInfo));
    info->numUtilizations = getLog->n_utilizations;
    if (info->numUtilizations > 0) {
        info->utilizations = KineticSerialAllocator_AllocateChunk(&allocator,
            info->numUtilizations * sizeof(KineticDeviceInfo_Utilization));
        for (size_t i = 0; i < info->numUtilizations; i++) {
            // Copy name string
            const char* protoName = getLog->utilizations[i]->name;
            if (protoName != NULL) {
                size_t len = strlen(protoName) + 1;
                info->utilizations[i].name =
                    KineticSerialAllocator_AllocateChunk(&allocator, len);
                memcpy(info->utilizations[i].name, protoName, len);
            }
            // Copy value
            if (getLog->utilizations[i]->has_value) {
                info->utilizations[i].value = getLog->utilizations[i]->value;
            }
        }
    }
    assert(info == KineticSerialAllocator_GetBuffer(&allocator));
    info->totalLength = allocator.used;

    // Trim the buffer prior to returning in order to free up unused memory
    info->totalLength = KineticSerialAllocator_TrimBuffer(&allocator);
    info = KineticSerialAllocator_GetBuffer(&allocator);
    LOGF2("Created KineticDeviceInfo @ 0x%0llX w/ length=%zu", info, info->totalLength);
    return info;
}
+9 −3
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include "kinetic_pdu.h"
#include "kinetic_nbo.h"
#include "kinetic_socket.h"
#include "kinetic_device_info.h"
#include "kinetic_allocator.h"
#include "kinetic_logger.h"
#include <stdlib.h>
@@ -390,11 +391,16 @@ KineticStatus KineticOperation_GetLogCallback(KineticOperation* operation)
    LOGF3("GETLOG callback w/ operation (0x%0llX) on connection (0x%0llX)",
        operation, operation->connection);
    assert(operation->response != NULL);
    assert(operation->response->command->body->getLog != NULL);

    // Copy the data from the response protobuf into a new info struct
    // TODO: stuff!!!

    return KINETIC_STATUS_INVALID;
    if (operation->response->command->body->getLog == NULL) {
        return KINETIC_STATUS_OPERATION_FAILED;
    }
    else {
        *operation->deviceInfo = KineticDeviceInfo_Create(operation->response->command->body->getLog);
        return KINETIC_STATUS_SUCCESS;
    }
}

void KineticOperation_BuildGetLog(KineticOperation* const operation,
Loading