コード例 #1
0
static long ai_init(int pass)
{
    long i;

    if (pass) return 0;

    /* Create timers */
    for (i = 0; i < TOTAL_TYPES; i++) {
        scanIoInit(&scan[i].ioscan);
        scan[i].wd = wdogCreate(scan_time, i);
        scan[i].total = 0;
        scan[i].on = 0;
        scan[i].rate_sec = parmTypes[i].scan_rate;
    }

    /* Init OSD stuff */
    scan_mutex = epicsMutexMustCreate();
    devIocStatsInitCpuUsage();
    devIocStatsInitCpuUtilization(&loadinfo);
    devIocStatsInitFDUsage();
    devIocStatsInitMemUsage();
    devIocStatsInitWorkspaceUsage();
    devIocStatsInitSuspTasks();
    devIocStatsInitIFErrors();
    /* Get initial values of a few things that don't change much */
    devIocStatsGetClusterInfo(SYS_POOL, &clustinfo[SYS_POOL]);
    devIocStatsGetClusterInfo(DATA_POOL, &clustinfo[DATA_POOL]);
    devIocStatsGetClusterUsage(SYS_POOL, &mbufnumber[SYS_POOL]);
    devIocStatsGetClusterUsage(DATA_POOL, &mbufnumber[DATA_POOL]);
    devIocStatsGetCpuUtilization(&loadinfo);
    devIocStatsGetIFErrors(&iferrors);
    devIocStatsGetFDUsage(&fdusage);

    /* Count EPICS records */
    if (pdbbase) {
        DBENTRY dbentry;
        long	  status;
        dbInitEntry(pdbbase,&dbentry);
        status = dbFirstRecordType(&dbentry);
        while (!status) {
            recordnumber += dbGetNRecords(&dbentry);
            status = dbNextRecordType(&dbentry);
        }
        dbFinishEntry(&dbentry);
    }
    return 0;
}
コード例 #2
0
static void statsMinDataMBuf(double* val)
{
    devIocStatsGetClusterInfo(DATA_POOL, &clustinfo[DATA_POOL]);
    *val = minMBuf(DATA_POOL);
}
コード例 #3
0
static void scan_time(int type)
{
    switch(type) {
      case MEMORY_TYPE:
      {
	memInfo   meminfo_local = {0.0,0.0,0.0,0.0,0.0,0.0};
	memInfo   workspaceinfo_local = {0.0,0.0,0.0,0.0,0.0,0.0};
	int       mbufnumber_local[2] = {0,0};
	ifErrInfo iferrors_local = {0,0};
        devIocStatsGetMemUsage(&meminfo_local);
        devIocStatsGetWorkspaceUsage(&workspaceinfo_local);
	devIocStatsGetClusterUsage(SYS_POOL, &mbufnumber_local[SYS_POOL]);
	devIocStatsGetClusterUsage(DATA_POOL, &mbufnumber_local[DATA_POOL]);
	devIocStatsGetIFErrors(&iferrors_local);
        epicsMutexLock(scan_mutex);
	meminfo               = meminfo_local;
	workspaceinfo         = workspaceinfo_local;
	mbufnumber[SYS_POOL]  = mbufnumber_local[SYS_POOL];
	mbufnumber[DATA_POOL] = mbufnumber_local[DATA_POOL];
	iferrors              = iferrors_local;
	devIocStatsGetClusterInfo(SYS_POOL, &clustinfo[SYS_POOL]);
	devIocStatsGetClusterInfo(DATA_POOL, &clustinfo[DATA_POOL]);
        epicsMutexUnlock(scan_mutex);
	break;
      }
      case LOAD_TYPE:
      {
	loadInfo loadinfo_local = {1,0.,0.};
	int      susptasknumber_local = 0;
        devIocStatsGetCpuUsage(&loadinfo_local);
        devIocStatsGetCpuUtilization(&loadinfo_local);
        devIocStatsGetSuspTasks(&susptasknumber_local);
        epicsMutexLock(scan_mutex);
	loadinfo       = loadinfo_local;
	susptasknumber = susptasknumber_local;
        epicsMutexUnlock(scan_mutex);
	break;
      }
      case FD_TYPE:
      {
	fdInfo   fdusage_local = {0,0};
        devIocStatsGetFDUsage(&fdusage_local);
        epicsMutexLock(scan_mutex);
	fdusage = fdusage_local;
        epicsMutexUnlock(scan_mutex);
	break;
      }
      case CA_TYPE:
      {
        unsigned cainfo_clients_local = 0;
        unsigned cainfo_connex_local  = 0;
	casStatsFetch(&cainfo_connex_local, &cainfo_clients_local);
        epicsMutexLock(scan_mutex);
        cainfo_clients = cainfo_clients_local;
        cainfo_connex  = cainfo_connex_local;
        epicsMutexUnlock(scan_mutex);
	break;
      }
      default:
        break;
    }
    scanIoRequest(scan[type].ioscan);
    if(scan[type].on)
		epicsTimerStartDelay(scan[type].wd, scan[type].rate_sec);
}
コード例 #4
0
static void statsMinSysMBuf(double* val)
{
    devIocStatsGetClusterInfo(SYS_POOL, &clustinfo[SYS_POOL]);
    *val = minMBuf(SYS_POOL);
}