<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-us" xml:lang="en-us">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="security" content="public" />
<meta name="Robots" content="index,follow" />
<meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
<meta name="DC.Type" content="reference" />
<meta name="DC.Title" content="Example: data collection program" />
<meta name="abstract" content="This program example collects some test data and stores it in a data buffer, which Collection Services copy to the collection object." />
<meta name="description" content="This program example collects some test data and stores it in a data buffer, which Collection Services copy to the collection object." />
<meta name="DC.Relation" scheme="URI" content="rzahxcollservuserdefexample.htm" />
<meta name="DC.Relation" scheme="URI" content="rzahxcolluserdefprog.htm" />
<meta name="copyright" content="(C) Copyright IBM Corporation 1998, 2006" />
<meta name="DC.Rights.Owner" content="(C) Copyright IBM Corporation 1998, 2006" />
<meta name="DC.Format" content="XHTML" />
<meta name="DC.Identifier" content="rzahxcolluserdefexdatacoll" />
<meta name="DC.Language" content="en-us" />
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<link rel="stylesheet" type="text/css" href="./ibmdita.css" />
<link rel="stylesheet" type="text/css" href="./ic.css" />
<title>Example: data collection program</title>
</head>
<body id="rzahxcolluserdefexdatacoll"><a name="rzahxcolluserdefexdatacoll"><!-- --></a>
<!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
<h1 class="topictitle1">Example: data collection program</h1>
<div><p>This program example collects some test data and stores it in a
data buffer, which Collection Services copy to the collection object.</p>
<div class="section"><div class="note"><span class="notetitle">Note:</span> By using the code examples, you agree to the terms of the <a href="codedisclaimer.htm">Code license and disclaimer information</a>.</div>
</div>
<div class="section"><h4 class="sectiontitle">C++ sample code</h4><pre>
#include "string.h"                     // memcpy(), memset(), strlen()
#include "stdio.h"                     // printf()
#include "qpmdcprm.h"                   // data collection program interface
#include "time.h"

extern "C"
void DCPentry( Qpm_DC_Parm_t *request, char *dataBuffer,
                                                         char *workArea, int *returnCode )
{
  static  char  testData[21] = "Just some test stuff";
  int           i;



/* Print contents of request structure */

  printf( "DCP called with parameters:\n" );
  printf( "  format name: \"%8.8s\";  category name: \"%10.10s\";\n",
          request-&gt;formatName, request-&gt;categoryName );
  printf( "  rsvd1: %4.4X; req type: %d; req mod: %d; buffer len: %d;\n",
          *(short *)(request-&gt;rsvd1), request-&gt;requestType,
          request-&gt;requestModifier, request-&gt;dataBufferLength);
  printf( "  prm offset: %d; prm len: %d; work len: %d; rsvd2: %8.8X;\n",
          request-&gt;parmOffset, request-&gt;parmLength, request-&gt;workAreaLength,
          *(int *)(request-&gt;rsvd2) );
  printf( "  rec key: \"%8.8s\"; timestamp: %8.8X %8.8X;\n",
          request-&gt;intervalKey,
          *(int *)(request-&gt;intervalTimestamp),
          *(int *)(request-&gt;intervalTimestamp + 4) );
  printf( "  return len: %d; more data: %d; rsvd3: %8.8X %8.8X;\n",
          request-&gt;bytesProvided, request-&gt;moreData,
          *(int *)(request-&gt;rsvd3),
          *(int *)(request-&gt;rsvd3 + 4) );

  switch ( request-&gt;requestType )
  { 
  /* Write control record in the beginning of collection */
    case PM_DOBEGIN:
      printf( "doBegin(%d)\n", request-&gt;requestModifier );
      switch ( request-&gt;requestModifier)
      {
        case PM_CALL_NORMAL:
            memcpy( dataBuffer, testData, 20 );
            *(int *)workArea = 20;
            request-&gt;moreData = PM_MORE_DATA;
            request-&gt;bytesProvided = 20;
          break;

        case PM_CALL_CONTINUE:
          if ( *(int *)workArea &lt; 200 )
          {
            memcpy( dataBuffer, testData, 20 );
            *(int *)workArea += 20;
            request-&gt;moreData = PM_MORE_DATA;
            request-&gt;bytesProvided = 20;
          }
          else
          {
            *(int *)workArea = 0;
            request-&gt;moreData = PM_NO_MORE_DATA;
            request-&gt;bytesProvided = 0;
          }
          break;

        default:
          *returnCode = -1;
          return;
      }
      break;
 /* Write control record in the end of collection */
    case PM_DOEND:
      printf( "doEnd(%d)\n", request-&gt;requestModifier );
      switch ( request-&gt;requestModifier)
      {
        case PM_CALL_NORMAL:
            memcpy( dataBuffer, testData, 20 );
            *(int *)workArea = 20;
            request-&gt;moreData = PM_MORE_DATA;
            request-&gt;bytesProvided = 20;
          break;

        case PM_CALL_CONTINUE:
          if ( *(int *)workArea &lt; 200 )
          {
            memcpy( dataBuffer, testData, 20 );
            *(int *)workArea += 20;
            request-&gt;moreData = PM_MORE_DATA;
            request-&gt;bytesProvided = 20;
          }
          else
          {
            *(int *)workArea = 0;
            request-&gt;moreData = PM_NO_MORE_DATA;
            request-&gt;bytesProvided = 0;
          }
          break;

        default:
          *returnCode = -1;
          return;
      }
      break;
          
 /*Write interval record */
    case PM_DOCOLLECT:
      printf( "doCollect(%d)\n", request-&gt;requestModifier );
      for ( i = 0; i &lt; 10000; i++ )
        dataBuffer[i] = i % 256;
      request-&gt;bytesProvided = 10000;

      switch ( request-&gt;requestModifier)
      {
        case PM_CALL_NORMAL:
            *(time_t *)(workArea + 4) = time( NULL );
            *(int *)workArea = 1;
            request-&gt;moreData = PM_MORE_DATA;
          break;

        case PM_CALL_CONTINUE:
          *(int *)workArea += 1;
          if ( *(int *)workArea &lt; 20 )
            request-&gt;moreData = PM_MORE_DATA;
          else
          {
            *(time_t *)(workArea + 8) = time( NULL );
            printf( "doCollect() complete in %d secs (%d bytes transferred)\n",
                    *(time_t *)(workArea + 8) - *(time_t *)(workArea + 4), 10000 * 20 );
            request-&gt;moreData = PM_NO_MORE_DATA;
          }
          break;

        default:
          *returnCode = -1;
          return;
      }
      break;
 /* Clean-up and terminate */
    case PM_DOSHUTDOWN:
      printf( "doShutdown\n" );
      *returnCode = 0;
      return;
      break;

    default:
      *returnCode = -1;
      return;
      break;
  }

}/* DCPentry() */
</pre>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="rzahxcollservuserdefexample.htm" title="Look here for sample programs that illustrate how you can use the provided APIs to integrate customized data collections into Collection Services.">Example: Implementing user-defined categories</a></div>
</div>
<div class="relconcepts"><strong>Related concepts</strong><br />
<div><a href="rzahxcolluserdefprog.htm" title="Collection Services calls the data collection program once during the start of a collection cycle, once for each collection interval, and again at the end of the collection cycle.">Collection program recommendations and requirements</a></div>
</div>
</div>
</body>
</html>