Package com.dianping.cat.core.dal

Examples of com.dianping.cat.core.dal.Graph


    List<Graph> graphs = new ArrayList<Graph>(ips.size() + 1);
    Map<String, GraphLine> allDetailCache = new TreeMap<String, GraphLine>();
    Map<String, GraphLine> allSummaryCache = new TreeMap<String, GraphLine>();
    Date creationDate = new Date();
    for (String ip : ips) {
      Graph graph = new Graph();
      graph.setIp(ip);
      graph.setDomain(domainName);
      graph.setName(reportName);
      graph.setPeriod(reportPeriod);
      graph.setType(3);
      graph.setCreationDate(creationDate);
      Machine machine = eventReport.getMachines().get(ip);
      Map<String, EventType> types = machine.getTypes();
      StringBuilder detailBuilder = new StringBuilder();
      StringBuilder summaryBuilder = new StringBuilder();
      for (Entry<String, EventType> eventEntry : types.entrySet()) {
        EventType eventType = eventEntry.getValue();
        long[] typeCounts = new long[60];
        long[] typeFails = new long[60];

        Map<String, EventName> names = eventType.getNames();
        for (Entry<String, EventName> nameEntry : names.entrySet()) {
          EventName eventName = nameEntry.getValue();
          List<Range> ranges = new ArrayList<Range>(eventName.getRanges().values());
          detailBuilder.append(eventType.getId());
          detailBuilder.append('\t');
          detailBuilder.append(eventName.getId());
          detailBuilder.append('\t');

          long[] totalCount = getTotalCount(ranges);
          detailBuilder.append(arrayToString(totalCount));
          detailBuilder.append('\t');
          long[] failCount = getFailsCount(ranges);
          detailBuilder.append(arrayToString(failCount));
          detailBuilder.append('\n');

          String key = eventType.getId() + "\t" + eventName.getId();
          GraphLine detailLine = allDetailCache.get(key);
          if (detailLine == null) {
            detailLine = new GraphLine();
            allDetailCache.put(key, detailLine);
          }

          detailLine.totalCounts = arrayAdd(detailLine.totalCounts, totalCount);
          detailLine.failCounts = arrayAdd(detailLine.failCounts, failCount);

          typeCounts = arrayAdd(typeCounts, totalCount);
          typeFails = arrayAdd(typeFails, failCount);
        }

        String summaryKey = eventType.getId();
        GraphLine summaryLine = allSummaryCache.get(summaryKey);
        if (summaryLine == null) {
          summaryLine = new GraphLine();
          allSummaryCache.put(summaryKey, summaryLine);
        }
        summaryLine.totalCounts = arrayAdd(summaryLine.totalCounts, typeCounts);
        summaryLine.failCounts = arrayAdd(summaryLine.failCounts, typeFails);

        summaryBuilder.append(eventType.getId());
        summaryBuilder.append('\t');
        summaryBuilder.append(arrayToString(typeCounts));
        summaryBuilder.append('\t');
        summaryBuilder.append(arrayToString(typeFails));
        summaryBuilder.append('\n');
      }
      graph.setDetailContent(detailBuilder.toString());
      graph.setSummaryContent(summaryBuilder.toString());
      graphs.add(graph);
    }

    Graph allGraph = new Graph();
    allGraph.setIp("all");
    allGraph.setDomain(domainName);
    allGraph.setName(reportName);
    allGraph.setPeriod(reportPeriod);
    allGraph.setType(3);
    allGraph.setCreationDate(creationDate);

    StringBuilder detailSb = new StringBuilder();
    for (Entry<String, GraphLine> entry : allDetailCache.entrySet()) {
      detailSb.append(entry.getKey());
      detailSb.append('\t');
      GraphLine value = entry.getValue();
      detailSb.append(arrayToString(value.totalCounts));
      detailSb.append('\t');
      detailSb.append(arrayToString(value.failCounts));
      detailSb.append('\t');
      detailSb.append('\n');
    }
    allGraph.setDetailContent(detailSb.toString());

    StringBuilder summarySb = new StringBuilder();
    for (Entry<String, GraphLine> entry : allSummaryCache.entrySet()) {
      summarySb.append(entry.getKey());
      summarySb.append('\t');
      GraphLine value = entry.getValue();
      summarySb.append(arrayToString(value.totalCounts));
      summarySb.append('\t');
      summarySb.append(arrayToString(value.failCounts));
      summarySb.append('\n');
    }
    allGraph.setSummaryContent(summarySb.toString());
    graphs.add(allGraph);
    return graphs;
  }
View Full Code Here


    Map<String, GraphLine> allSummaryCache = new TreeMap<String, GraphLine>();

    for (String ip : ips) {
      Map<String, GraphLine> detailCache = new TreeMap<String, GraphLine>();
      Map<String, GraphLine> summaryCache = new TreeMap<String, GraphLine>();
      Graph graph = new Graph();
      graph.setIp(ip);
      graph.setDomain(reportDomain);
      graph.setName(reportName);
      graph.setPeriod(reportPeriod);
      graph.setType(3);
      com.dianping.cat.consumer.problem.model.entity.Machine machine = report.findOrCreateMachine(ip);

      for (com.dianping.cat.consumer.problem.model.entity.Entry entry : machine.getEntries()) {
        Map<String, JavaThread> threads = entry.getThreads();
        String type = entry.getType();
        String status = entry.getStatus();

        for (Entry<String, JavaThread> problemEntry : threads.entrySet()) {
          JavaThread thread = problemEntry.getValue();

          for (Entry<Integer, Segment> segmentEntry : thread.getSegments().entrySet()) {
            Segment segment = segmentEntry.getValue();
            int minute = segment.getId();
            int count = segment.getMessages().size();
            String summaryKey = type;

            GraphLine summaryLine = summaryCache.get(summaryKey);
            if (summaryLine == null) {
              summaryLine = new GraphLine();
              summaryLine.minuteCounts = new int[60];
              summaryCache.put(summaryKey, summaryLine);
            }
            summaryLine.totalCount = summaryLine.totalCount + count;
            summaryLine.minuteCounts[minute] = summaryLine.minuteCounts[minute] + count;

            GraphLine allSummaryLine = allSummaryCache.get(summaryKey);
            if (allSummaryLine == null) {
              allSummaryLine = new GraphLine();
              allSummaryLine.minuteCounts = new int[60];
              allSummaryCache.put(summaryKey, allSummaryLine);
            }
            allSummaryLine.totalCount = allSummaryLine.totalCount + count;
            allSummaryLine.minuteCounts[minute] = allSummaryLine.minuteCounts[minute] + count;

            String detailKey = type + "\t" + status;
            GraphLine detailLine = detailCache.get(detailKey);
            if (detailLine == null) {
              detailLine = new GraphLine();
              detailLine.minuteCounts = new int[60];
              detailCache.put(detailKey, detailLine);
            }
            detailLine.totalCount = detailLine.totalCount + count;
            detailLine.minuteCounts[minute] = detailLine.minuteCounts[minute] + count;

            GraphLine allDetailLine = allDetailCache.get(detailKey);
            if (allDetailLine == null) {
              allDetailLine = new GraphLine();
              allDetailLine.minuteCounts = new int[60];
              allDetailCache.put(detailKey, allDetailLine);
            }
            allDetailLine.totalCount = allDetailLine.totalCount + count;
            allDetailLine.minuteCounts[minute] = allDetailLine.minuteCounts[minute] + count;
          }
        }
      }

      StringBuilder summaryBuilder = new StringBuilder();
      for (Entry<String, GraphLine> summaryEntry : summaryCache.entrySet()) {
        GraphLine summaryLine = summaryEntry.getValue();
        summaryBuilder.append(summaryEntry.getKey());
        summaryBuilder.append("\t");
        summaryBuilder.append(summaryLine.totalCount);
        summaryBuilder.append("\t");
        summaryBuilder.append(TaskHelper.join(summaryLine.minuteCounts, ','));
        summaryBuilder.append("\n");
      }
      graph.setSummaryContent(summaryBuilder.toString());

      StringBuilder detailBuilder = new StringBuilder();
      for (Entry<String, GraphLine> detailEntry : detailCache.entrySet()) {
        GraphLine detailLine = detailEntry.getValue();
        detailBuilder.append(detailEntry.getKey());
        detailBuilder.append("\t");
        detailBuilder.append(detailLine.totalCount);
        detailBuilder.append("\t");
        detailBuilder.append(TaskHelper.join(detailLine.minuteCounts, ','));
        detailBuilder.append("\n");
      }
      graph.setDetailContent(detailBuilder.toString());

      graph.setCreationDate(new Date());
      graphs.add(graph);
    }

    Graph allGraph = new Graph();
    allGraph.setIp("all");
    allGraph.setDomain(reportDomain);
    allGraph.setName(reportName);
    allGraph.setPeriod(reportPeriod);
    allGraph.setType(3);

    StringBuilder summaryBuilder = new StringBuilder();
    for (Entry<String, GraphLine> summaryEntry : allSummaryCache.entrySet()) {
      GraphLine summaryLine = summaryEntry.getValue();
      summaryBuilder.append(summaryEntry.getKey());
      summaryBuilder.append("\t");
      summaryBuilder.append(summaryLine.totalCount);
      summaryBuilder.append("\t");
      summaryBuilder.append(TaskHelper.join(summaryLine.minuteCounts, ','));
      summaryBuilder.append("\n");
    }
    allGraph.setSummaryContent(summaryBuilder.toString());

    StringBuilder detailBuilder = new StringBuilder();
    for (Entry<String, GraphLine> detailEntry : allDetailCache.entrySet()) {
      GraphLine detailLine = detailEntry.getValue();
      detailBuilder.append(detailEntry.getKey());
      detailBuilder.append("\t");
      detailBuilder.append(detailLine.totalCount);
      detailBuilder.append("\t");
      detailBuilder.append(TaskHelper.join(detailLine.minuteCounts, ','));
      detailBuilder.append("\n");
    }
    allGraph.setDetailContent(detailBuilder.toString());
    allGraph.setCreationDate(new Date());

    graphs.add(allGraph);
    return graphs;
  }
View Full Code Here

    Map<String, GraphLine> allDetailCache = new LinkedHashMap<String, GraphLine>();
    Map<String, GraphLine> allSummaryCache = new LinkedHashMap<String, GraphLine>();

    Date creationDate = new Date();
    for (String ip : ips) {
      Graph graph = new Graph();
      graph.setIp(ip);
      graph.setDomain(reportDomain);
      graph.setName(reportName);
      graph.setPeriod(reportPeriod);
      graph.setType(3);
      graph.setCreationDate(creationDate);
      Machine machine = report.findOrCreateMachine(ip);
      Map<String, TransactionType> types = machine.getTypes();
      StringBuilder detailBuilder = new StringBuilder();
      StringBuilder summaryBuilder = new StringBuilder();
      for (Entry<String, TransactionType> transactionEntry : types.entrySet()) {
        TransactionType transactionType = transactionEntry.getValue();
        long[] typeCounts = new long[60];
        long[] typeFails = new long[60];
        double[] typeSums = new double[60];

        Map<String, TransactionName> names = transactionType.getNames();
        for (Entry<String, TransactionName> nameEntry : names.entrySet()) {
          TransactionName transactionName = nameEntry.getValue();
          List<Range> ranges = new ArrayList<Range>(transactionName.getRanges().values());

          detailBuilder.append(transactionType.getId());
          detailBuilder.append('\t');
          detailBuilder.append(transactionName.getId());
          detailBuilder.append('\t');
          long[] totalCount = getTotalCount(ranges);
          detailBuilder.append(arrayToString(totalCount));
          detailBuilder.append('\t');
          long[] failsCount = getFailsCount(ranges);
          detailBuilder.append(arrayToString(failsCount));
          detailBuilder.append('\t');
          detailBuilder.append(transactionName.getMin());
          detailBuilder.append('\t');
          detailBuilder.append(transactionName.getMax());
          detailBuilder.append('\t');
          double[] sumCount = getSumCount(ranges);
          detailBuilder.append(arrayToString(sumCount));
          detailBuilder.append('\t');
          detailBuilder.append(transactionName.getSum2());
          detailBuilder.append('\n');

          String key = transactionType.getId() + "\t" + transactionName.getId();
          GraphLine detailLine = allDetailCache.get(key);
          if (detailLine == null) {
            detailLine = new GraphLine();
            allDetailCache.put(key, detailLine);
          }

          detailLine.totalCounts = arrayAdd(detailLine.totalCounts, totalCount);
          detailLine.failCounts = arrayAdd(detailLine.failCounts, failsCount);
          detailLine.min += transactionName.getMin();
          detailLine.max += transactionName.getMax();
          detailLine.sums = arrayAdd(detailLine.sums, sumCount);
          detailLine.sum2 += transactionName.getSum2();

          typeCounts = arrayAdd(typeCounts, totalCount);
          typeFails = arrayAdd(typeFails, failsCount);
          typeSums = arrayAdd(typeSums, sumCount);
        }
        summaryBuilder.append(transactionType.getId());
        summaryBuilder.append('\t');
        summaryBuilder.append(arrayToString(typeCounts));
        summaryBuilder.append('\t');
        summaryBuilder.append(arrayToString(typeFails));
        summaryBuilder.append('\t');
        summaryBuilder.append(transactionType.getMin());
        summaryBuilder.append('\t');
        summaryBuilder.append(transactionType.getMax());
        summaryBuilder.append('\t');
        summaryBuilder.append(arrayToString(typeSums));
        summaryBuilder.append('\t');
        summaryBuilder.append(transactionType.getSum2());
        summaryBuilder.append('\n');

        String summaryKey = transactionType.getId();
        GraphLine summaryLine = allSummaryCache.get(summaryKey);
        if (summaryLine == null) {
          summaryLine = new GraphLine();
          allSummaryCache.put(summaryKey, summaryLine);
        }

        summaryLine.totalCounts = arrayAdd(summaryLine.totalCounts, typeCounts);
        summaryLine.failCounts = arrayAdd(summaryLine.failCounts, typeFails);
        summaryLine.min += transactionType.getMin();
        summaryLine.max += transactionType.getMax();
        summaryLine.sums = arrayAdd(summaryLine.sums, typeSums);
        summaryLine.sum2 += transactionType.getSum2();
      }
      graph.setDetailContent(detailBuilder.toString());
      graph.setSummaryContent(summaryBuilder.toString());
      graphs.add(graph);
    }

    Graph allGraph = new Graph();
    allGraph.setIp("all");
    allGraph.setDomain(reportDomain);
    allGraph.setName(reportName);
    allGraph.setPeriod(reportPeriod);
    allGraph.setType(3);
    allGraph.setCreationDate(creationDate);

    StringBuilder detailSb = new StringBuilder();
    for (Entry<String, GraphLine> entry : allDetailCache.entrySet()) {
      detailSb.append(entry.getKey());
      detailSb.append('\t');
      GraphLine value = entry.getValue();
      detailSb.append(arrayToString(value.totalCounts));
      detailSb.append('\t');
      detailSb.append(arrayToString(value.failCounts));
      detailSb.append('\t');
      detailSb.append(value.min);
      detailSb.append('\t');
      detailSb.append(value.max);
      detailSb.append('\t');
      detailSb.append(arrayToString(value.sums));
      detailSb.append('\t');
      detailSb.append(value.sum2);
      detailSb.append('\n');
    }
    allGraph.setDetailContent(detailSb.toString());

    StringBuilder summarySb = new StringBuilder();
    for (Entry<String, GraphLine> entry : allSummaryCache.entrySet()) {
      summarySb.append(entry.getKey());
      summarySb.append('\t');
      GraphLine value = entry.getValue();
      summarySb.append(arrayToString(value.totalCounts));
      summarySb.append('\t');
      summarySb.append(arrayToString(value.failCounts));
      summarySb.append('\t');
      summarySb.append(value.min);
      summarySb.append('\t');
      summarySb.append(value.max);
      summarySb.append('\t');
      summarySb.append(arrayToString(value.sums));
      summarySb.append('\t');
      summarySb.append(value.sum2);
      summarySb.append('\n');
    }
    allGraph.setSummaryContent(summarySb.toString());

    graphs.add(allGraph);

    return graphs;
  }
View Full Code Here

        HeartbeatReport heartbeatReport) {
    Set<String> ips = heartbeatReport.getIps();
    List<Graph> graphs = new ArrayList<Graph>(ips.size());

    for (String ip : ips) {
      Graph graph = new Graph();
      graph.setIp(ip);
      graph.setDomain(domainName);
      graph.setName(reportName);
      graph.setPeriod(reportPeriod);
      graph.setType(3);
      com.dianping.cat.consumer.heartbeat.model.entity.Machine machine = heartbeatReport.getMachines().get(ip);

      if (machine == null) {
        continue;
      }
      List<Period> periods = machine.getPeriods();
      Map<String, GraphLine> detailCache = new TreeMap<String, GraphLine>();

      for (Period period : periods) {
        int minute = period.getMinute();

        String key = "CatMessageSize";
        Number value = period.getCatMessageSize();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "CatMessageOverflow";
        value = period.getCatMessageOverflow();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "CatMessageProduced";
        value = period.getCatMessageProduced();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        List<Disk> disks = period.getDisks();
        for (Disk d : disks) {
          key = "Disk " + d.getPath();
          value = d.getFree();
          cacheHeartbeatColumn(detailCache, minute, value, key);
        }

        key = "MemoryFree";
        value = period.getMemoryFree();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "HeapUsage";
        value = period.getHeapUsage();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "NoneHeapUsage";
        value = period.getNoneHeapUsage();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "SystemLoadAverage";
        value = period.getSystemLoadAverage();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "OldGcCount";
        value = period.getOldGcCount();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "NewGcCount";
        value = period.getNewGcCount();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "PigeonStartedThread";
        value = period.getPigeonThreadCount();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "CatThreadCount";
        value = period.getCatThreadCount();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "TotalStartedThread";
        value = period.getTotalStartedCount();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "DaemonThread";
        value = period.getDaemonCount();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "ActiveThread";
        value = period.getThreadCount();
        cacheHeartbeatColumn(detailCache, minute, value, key);

        key = "HttpThread";
        value = period.getHttpThreadCount();
        cacheHeartbeatColumn(detailCache, minute, value, key);
       
        for(Extension ext : period.getExtensions().values()){
          for(Entry<String,Detail> detail : ext.getDetails().entrySet()){
            key = detail.getValue().getId();
            value = detail.getValue().getValue();
            cacheHeartbeatColumn(detailCache, minute, value, key);
          }
        }
      }

      for (Entry<String, GraphLine> entry : detailCache.entrySet()) {
        GraphLine line = entry.getValue();
        double[] numbers = line.minuteNumbers;
        double minValue = numbers[0];
        double maxValue = minValue;
        double sum = minValue;
        double sum2 = sum * sum;

        for (int i = 1; i < numbers.length; i++) {
          double n = numbers[i];
          if (n > maxValue) {
            maxValue = n;
          }
          if (n < minValue) {
            minValue = n;
          }
          sum += n;
          sum2 += n * n;
        }

        line.min = minValue;
        line.max = maxValue;
        line.sum = sum;
        line.sum2 = sum2;
      }

      StringBuilder sb = new StringBuilder(64 * detailCache.size());
      for (Entry<String, GraphLine> entry : detailCache.entrySet()) {
        GraphLine value = entry.getValue();
        sb.append(entry.getKey());
        sb.append('\t');
        sb.append(value.min);
        sb.append('\t');
        sb.append(value.max);
        sb.append('\t');
        sb.append(value.sum);
        sb.append('\t');
        sb.append(value.sum2);
        sb.append('\t');
        sb.append(TaskHelper.join(value.minuteNumbers, ','));
        sb.append('\n');
      }

      graph.setDetailContent(sb.toString());
      graph.setCreationDate(new Date());
      graphs.add(graph);
    }
    return graphs;
  }
View Full Code Here

    ProblemGraphCreator creator = new ProblemGraphCreator();
    List<Graph> graphs = creator.splitReportToGraphs(report.getStartTime(), report.getDomain(), "problem", report);

    Assert.assertEquals("The graphs size", 3, graphs.size());

    Graph graph = graphs.get(0);

    String detail = graph.getDetailContent();
    String summary = graph.getSummaryContent();

    String exceptionSummary = Files.forIO().readFrom(getClass().getResourceAsStream("problemSummary"), "utf-8");
    String exceptionDetail = Files.forIO().readFrom(getClass().getResourceAsStream("problemDetail"), "utf-8");

    Assert.assertEquals(exceptionSummary.replaceAll("\r", ""), summary.replaceAll("\r", ""));
    Assert.assertEquals(exceptionDetail.replaceAll("\r", ""), detail.replaceAll("\r", ""));

    graph = graphs.get(1);

    detail = graph.getDetailContent();
    summary = graph.getSummaryContent();

    Assert.assertEquals(exceptionSummary.replaceAll("\r", ""), summary.replaceAll("\r", ""));
    Assert.assertEquals(exceptionDetail.replaceAll("\r", ""), detail.replaceAll("\r", ""));

    exceptionSummary = Files.forIO().readFrom(getClass().getResourceAsStream("problemAllSummary"), "utf-8");
    exceptionDetail = Files.forIO().readFrom(getClass().getResourceAsStream("problemAllDetail"), "utf-8");
    graph = graphs.get(2);

    detail = graph.getDetailContent();
    summary = graph.getSummaryContent();

    Assert.assertEquals(exceptionSummary.replaceAll("\r", ""), summary.replaceAll("\r", ""));
    Assert.assertEquals(exceptionDetail.replaceAll("\r", ""), detail.replaceAll("\r", ""));
  }
View Full Code Here

          + "\n"
          + "Result  cacheService:cacheConfigService_1.0.0:getCacheConfigurations  6  0  28.769  64.718  302.0  16596.8"
          + "\n" + "Result  cacheService:cacheConfigService_1.0.0:getKeyConfigurations  30,30,30,30,30,30,30,30,30,30,30,30  0  6.83  7.583  43.2  311.0";

    for (long i = start.getTime(); i < end.getTime(); i = i + ONE_HOUR) {
      Graph graph = new Graph();
      graph.setDetailContent(detail);
      graph.setSummaryContent(summary);
      graphs.add(graph);
      graph.setPeriod(new Date(i));
    }
    return graphs;
  }
View Full Code Here

  private String getContent(String fileName) throws IOException {
    return Files.forIO().readFrom(getClass().getResourceAsStream(fileName), "utf-8");
  }

  private Graph creatGraph(Date period) throws IOException {
    Graph graph = new Graph();
    graph.setPeriod(period);
    graph.setDetailContent(getContent("detail"));
    graph.setSummaryContent(getContent("summary"));
    return graph;
  }
View Full Code Here

    }
    Assert.assertEquals(true, Arrays.equals(ActiveThread, expectActiveThread));
  }

  private Graph creatGraph(Date start) throws IOException {
    Graph graph = new Graph();
    graph.setPeriod(start);
    graph.setDetailContent(getContent());
    return graph;
  }
View Full Code Here

    String s = Files.forIO().readFrom(getClass().getResourceAsStream(fileName), "utf-8");
    return s;
  }

  private Graph creatGraph(Date period) throws IOException {
    Graph graph = new Graph();
    graph.setPeriod(period);
    String detail = getContent("detail");
    graph.setDetailContent(detail);
    graph.setSummaryContent(getContent("summary"));
    return graph;
  }
View Full Code Here

    String queryIp = "All".equals(ip) == true ? "all" : ip;
    List<Graph> graphs = new ArrayList<Graph>();

    for (long startLong = start.getTime(); startLong < end.getTime(); startLong = startLong + TimeHelper.ONE_HOUR) {
      try {
        Graph graph = m_graphDao.findSingalByDomainNameIpDuration(new Date(startLong), queryIp, domain,
              TransactionAnalyzer.ID, GraphEntity.READSET_FULL);
        graphs.add(graph);
      } catch (DalNotFoundException e) {
      } catch (Exception e) {
        Cat.logError(e);
View Full Code Here

TOP

Related Classes of com.dianping.cat.core.dal.Graph

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.